Java 事件队列。为什么一切都应该在 invokelater 方法中?

标签 java multithreading swing event-dispatch-thread

在我正在阅读的书中,每个使用多线程的 GUI 示例都有类似的内容:

public static void main(String[] args) throws Exception
{
    EventQueue.invokeLater(new Runnable()
    {
        public void run()
        {
            JFrame frame = new SomeKindOfFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setVisible(true);
        }
    });
}

(我的意思是 EventQueue)。但代码不是在主 (EDT) 线程中自动执行吗?

最佳答案

主线程与 EDT 不同。如果你添加 System.out.println(Thread.currentThread().getName() 你会看到它在 main() 中打印出 main > 和 AWT-EventQueue-0Runnablerun() 方法中。

这里是 a discussion of the history of the single threaded rule in Swing这可能有助于让事情变得更清楚。

关于Java 事件队列。为什么一切都应该在 invokelater 方法中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780936/

相关文章:

java - 拖放 SWT 容器组合

java - 为什么 map.keyset() 返回 Collection View 而 map.values() 返回 Java 中的集合?

java - Jersey ContainerRequestFilter 获取空实体流

c++ - 多线程会提供任何性能提升吗?

java - 引用应用程序资源时的 NPE

java - 在 JUNG 2.0 Java 框架中使用 EditingModalGraphMouse 插件自定义鼠标菜单

java - TestNG 继续执行测试类,即使之前的类失败了

java - 使用多个线程递增和递减单个共享变量

java - 代码的 “side-effects”到底是什么意思?

java - 检测用户何时关闭 float 工具栏框架