116*_*684 13 java swing invokelater swingutilities
可能重复:
SwingUtilities.invokeLater做什么?
SwingUtilities.invokeLater
我已经看过几百次这段代码了:
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:做invokeLater()什么?如果我只是在主线程中创建并显示我的GUI,会发生什么样的坏事?
Kum*_*tra 11
1. Event Dispatcher Thread是GUI线程.
2.如果你是在谈论main() method...然后它不是长期生活在Java GUI中.
main()在EDT退出后调度GUI结构后的方法,现在是处理GUI的EDT.
3. invokeLater表示当事件放入Event Dispatcher Queue时,此调用将立即返回,并且run()方法将异步运行...
Swing不是线程安全的,并且必须在Event Dispatch Thread中执行对Swing对象的所有更改.如果您尝试在其外部运行代码,您将得到未指定的行为,这可能会在某些时候变得奇怪.
相比之下,Eclipse使用的SWT/JFace GUI框架在每个公共入口点上断言正确的线程.
如果您在遵循准则的情况下从 EDT 进行更新,则不会发生任何不良情况。
那是...
如果从事件调度线程(例如,从 JButton 的 ActionListener)调用 invokeLater,则 doRun.run() 仍将被推迟,直到处理完所有待处理事件。
如果不是这种情况,invokeLater()则需要。
它调度Runnable将在 EDT(事件调度线程)上执行的任务。
| 归档时间: |
|
| 查看次数: |
31591 次 |
| 最近记录: |