什么是SwingUtilities.invokeLater [复制](What is SwingUt

2019-06-27 06:10发布

可能重复:
是什么SwingUtilities.invokeLater办?
SwingUtilities.invokeLater

我已经看到了这一小段代码数百次:

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          createAndShowGUI();
        }
    });
}

现在的问题是:是什么invokeLater()吗? 如果我只是创建并显示在主线程里面我的GUI什么样的不好的事情会发生?

Answer 1:

如果你从美国东部时间而以下更新它没什么不好会发生的准则 。

那是...

例如,从JButton的ActionListener的 - - 如果invokeLater的是从事件指派线程调用​​doRun.run()仍然会被推迟,直到所有挂起事件被处理。

资源

如果不是的话, invokeLater()是必需的。

它安排一个Runnable ,这将在美国东部时间执行(事件指派线程)。



Answer 2:

1. Event Dispatcher Thread是GUI线程。

2.如果你正在谈论的main() method ...然后它不是长期生活在Java GUI中main()调度GUI在EDT的施工方法后退出,现在它的EDT处理该GUI。

3. invokeLater意思是该调用将立即返回作为事件被放置在事件调度程序队列,并run()方法将异步运行...



Answer 3:

Swing是不是线程安全的,所有更改挥杆必须在事件调度线程中执行对象。 如果您尝试外面运行你的代码,你会得到明确的行为,这可能会在某些时候变得怪异。

相反,Eclipse使用的SWT / JFace的GUI框架上断言每个公共入口点正确的线程。



文章来源: What is SwingUtilities.invokeLater [duplicate]