可能重复:
是什么SwingUtilities.invokeLater办?
SwingUtilities.invokeLater
我已经看到了这一小段代码数百次:
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
现在的问题是:是什么invokeLater()
吗? 如果我只是创建并显示在主线程里面我的GUI什么样的不好的事情会发生?
如果你从美国东部时间而以下更新它没什么不好会发生的准则 。
那是...
例如,从JButton的ActionListener的 - - 如果invokeLater的是从事件指派线程调用doRun.run()仍然会被推迟,直到所有挂起事件被处理。
资源
如果不是的话, invokeLater()
是必需的。
它安排一个Runnable
,这将在美国东部时间执行(事件指派线程)。
1. Event Dispatcher Thread
是GUI线程。
2.如果你正在谈论的main() method
...然后它不是长期生活在Java GUI中 。 main()
调度GUI在EDT的施工方法后退出,现在它的EDT处理该GUI。
3. invokeLater
意思是该调用将立即返回作为事件被放置在事件调度程序队列,并run()
方法将异步运行...
Swing是不是线程安全的,所有更改挥杆必须在事件调度线程中执行对象。 如果您尝试外面运行你的代码,你会得到明确的行为,这可能会在某些时候变得怪异。
相反,Eclipse使用的SWT / JFace的GUI框架上断言每个公共入口点正确的线程。