Mam program główny, w którym GUI opiera się na swing i w zależności od jednego z czterech stanów elementy GUI mają różne parametry.Odświeżające GUI przez inny wątek w java (swing)
public class Frame extends JFrame implements Runnable {
Status status = 1;
...
@Override
public void run() {
switch (status) {
case 1:
...
case 2:
...
}
public void updateGUI(Status status) {
this.status = status;
SwingUtilities.invokeLater(this);
}
A jeśli chcę odświeżyć GUI wywołuje tylko updateGUI z odpowiednim parametrem i wszystko jest w porządku. Ale program tworzy również dodatkowy wątek, który po przetworzeniu odpowiednich danych powinien zmienić główny program GUI. Niestety nie mogę w tym wątku wywołać metody updateGUI (..).
Wiem, że można użyć invokeLater lub SwingWorker do odświeżenia, ale jest więcej niż 10 elementów, więc wolałbym użyć metody udpateGUI().
Będę wdzięczny za wszelkie wskazówki.
Proszę spojrzeć na odpowiedzi o wydarzeniach & Bus wydarzenie w tej kwestii: http://stackoverflow.com/questions/7131484/how-to-pass-the-message-from-working-thread-to -gui-in-java/7131574 # 7131574 –
Dlaczego nie możesz wywołać updateGUI z innego wątku? Oprócz niezsynchronizowanego dostępu do zmiennej status, nie widzę powodu, dla którego nie można użyć tej metody z innego wątku. –
jeśli wzywam Frame f = new Frame(); f.udpateGUI (..); wtedy oczywiście nic się nie stało. Jak inaczej mogę skorzystać z tej metody? – galica