什么是 SwingUtilities.invokeLater

2022-09-03 14:38:50

可能的重复:
SwingUtilities.invokeLater做什么?
SwingUtilities.invokeLater

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

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

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


答案 1

1. 是 GUI 线程。Event Dispatcher Thread

2.如果您正在谈论...然后它在Java Gui中并不长久。 方法在 EDT 中调度 GUI 的构造后退出,现在其 EDT 处理 GUI。main() methodmain()

3. 表示当事件放入事件调度程序队列中时,此调用将立即返回,并且方法将异步运行...invokeLaterrun()


答案 2

Swing 不是线程安全的,对 Swing 对象的所有更改都必须在事件调度线程中执行。如果您尝试在其外部运行代码,则会遇到未指定的行为,这可能会在某些时候变得奇怪。

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


推荐