9

在我正在阅读的书中,每个带有多线程的 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);
        }
    });
}

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

4

2 回答 2

15

主线程与 EDT 不同。如果您添加,您会看到System.out.println(Thread.currentThread().getName()main在.main()AWT-EventQueue-0run()Runnable

这里讨论了 Swing 中单线程规则的历史,这可能有助于让事情变得更清晰。

于 2011-04-25T17:27:01.843 回答
8

桌面 GUI 应用程序通常以这种方式工作。gui 有一个线程,其余应用程序有一个或多个线程。使用EventQueue您指定 GUI 线程应该从其他线程执行的操作。

于 2011-04-25T17:28:24.460 回答