【发布时间】:2011-11-05 22:55:56
【问题描述】:
我有一个主程序,其中 GUI 基于摇摆,根据四种状态之一,GUI 元素具有不同的参数。
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()。
如有任何提示,我将不胜感激。
【问题讨论】:
-
请看一下这个问题中关于事件和事件总线的答案:stackoverflow.com/questions/7131484/…
-
为什么不能从其他线程调用updateGUI?除了对状态变量的非同步访问之外,我不明白为什么您不能从其他线程使用此方法。
-
如果我调用 Frame f = new Frame(); f.udpateGUI(..);然后当然什么也没发生。我还能如何调用该方法?
-
将要更新的框架传递给您的后台任务(例如在其构造函数中)
标签: java multithreading swing user-interface