java - Java 中 GUI 和线程的奇怪之处

标签 java multithreading swing invokelater

给定以下代码:

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) {
            }
         }
    });
}

并且输出是一个空白窗口,它不会对窗口退出使用react。 有人可以向我解释一下这里到底发生了什么吗?

最佳答案

Can someone explane me what exactly happans here?

当然。您将事件分派(dispatch)线程保持在无限循环中,因此它永远不会对“关闭窗口”等事件使用react。不要那样做。

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

参见 "Concurrency in Swing"教程了解更多详情。

关于java - Java 中 GUI 和线程的奇怪之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16241540/

相关文章:

java - 限制 Android Google Places API 仅搜索给定区域

java - java 中方法的构造函数

javascript - 在 Gmail 中获取线程 ID

c++ - std::thread 构造函数第三个模板参数的目的是什么?

java - GridBagLayout gridwidth 不能按预期工作

java - 包括冒号[:] in regular expression

java - 防止用户输入大于 int max 的值?

Linux 线程性能在 GDB 下非常快,但在其他情况下非常慢

java - 在 Swing 应用程序框架 jsr 296 中设置不同的外观

java - 只执行一个 SwingWorker 实例