我有一個主程序,其中GUI基於swing,並且取決於四種狀態之一GUI元素具有不同的參數。由java中的另一個線程刷新GUI(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);
}
如果我想刷新GUI只調用具有適當參數的updateGUI,一切都很好。但該程序還創建了一個額外的線程,在處理完相關數據後,應該更改GUI主程序。不幸的是我不能在這個線程中調用updateGUI(..)方法。
我知道我可以使用invokeLater或SwingWorker來刷新,但有超過10個元素,所以我寧願使用方法udpateGUI()。
我將不勝感激任何提示。
請看看在這個問題上關於事件和事件總線的答案: http://stackoverflow.com/questions/7131484/how-to-pass-the-message-from-working-thread-to -gui-in-java/7131574#7131574 –
爲什麼你不能從另一個線程調用updateGUI?除了對狀態變量的非同步訪問,我不明白爲什麼你不能從另一個線程使用這個方法。 –
如果我調用Frame f = new Frame(); f.udpateGUI(..);那麼當然沒有事情發生。我還能如何調用這種方法? – galica