1

给定以下代码:

public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable() 
    {
        public void run() 
         {
            ClientGUI gui = new ClientGUI();
            gui.start();
         }
    });
}

一切正常,我得到了一个不错的 GUI 窗口。好的。现在,让我们在 gui.start() 之后添加一个无限循环:

public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable() 
    {
        public void run() 
         {
            ClientGUI gui = new ClientGUI();
            gui.start();
            while (true) {
            }
         }
    });
}

并且输出是一个空白窗口,对窗口退出没有反应。有人可以解释一下这里到底发生了什么吗?

4

1 回答 1

7

有人可以解释一下这里到底发生了什么吗?

当然。您将事件调度线程保持在无限循环中,因此它永远不会对诸如“关闭窗口”之类的事件做出反应。不要那样做。

您应该尽可能多地保持事件调度线程可用 - 不要在其上执行任何长时间运行的任务,包括 IO 操作,例如从文件或网络读取。

有关更多详细信息,请参阅“Swing 中的并发”教程。

于 2013-04-26T16:57:16.523 回答