可能重复: SwingUtilities.invokeLater是做什么的? SwingUtilities.invokeLater
我见过这段代码几百次了:
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}现在我的问题是:invokeLater()是做什么的?如果我只是在主线程中创建并显示我的GUI,那么会发生什么样的坏事呢?
发布于 2012-08-22 16:15:11
如果您在跟踪指导方针时从EDT更新它,那么不会发生任何不好的事情。
那是..。
如果从事件调度线程--例如来自JButton的invokeLater‘s ActionListener --调用doRun.run(),那么doRun.run()仍将被推迟,直到所有挂起的事件都已处理完毕。
来源
如果不是这样,则需要invokeLater()。
它调度将在EDT (事件调度线程)上执行的Runnable。
发布于 2012-08-22 16:17:01
1. Event Dispatcher Thread是GUI线程。
2. --如果您谈论的是main() method...then ,它在Java 中生活的时间不长。main()方法在调度图形用户界面后退出,现在它的EDT处理图形用户界面.。
3. invokeLater意味着当事件放置在事件调度程序队列中时,该调用将立即返回,而run()方法将异步运行.
发布于 2012-08-22 16:14:00
Swing不是线程安全的,对Swing对象的所有更改都必须在事件调度线程中执行。如果您尝试在外部运行代码,您将得到未指定的行为,这可能会在某个时候变得奇怪。
相反,Eclipse使用的SWT/JFace GUI框架在每个公共入口点上断言正确的线程。
https://stackoverflow.com/questions/12077245
复制相似问题