为什么使用invokeLater很重要?

Bur*_*ras 3 java swing invokelater event-dispatch-thread

我最近发现了一个示例代码:

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

createAndShowGUI()方法打开用户界面窗口.然后我尝试修改代码如下:

public static void main(String[] args) {
    createAndShowGUI();
}
Run Code Online (Sandbox Code Playgroud)

两个版本都同样有效.有什么不同?

cam*_*ckr 10

99%的时间任一代码都可以工作.

但是,Swing的设计使得Swing组件的所有更新都应该在Event Dispatch Thread(EDT)上完成.阅读有关并发的Swing教程以获取更多信息.

问题是1%的时间可能无法正常工作.您不想浪费时间尝试调试随机问题.