java - Swing 事件线程 Java

标签 java multithreading swing jframe event-dispatch-thread

在此代码中 HelloWorldApp 只是扩展了 JFrame 。 为什么我不需要将“app”对象定义放入 invokeLater 方法中? 为什么“应用程序”需要是最终的?谢谢

final HelloWorldApp app = new HelloWorldApp();
SwingUtilities.invokeLater( new Runnable() 
{
    public void run() 
    {
        app.createAndShowGUI();
    }
});

最佳答案

  1. 对 swing 组件的 UI 状态的所有更改都必须在 EDT(事件调度线程)内完成。因此,只要在构造函数 HelloWorldApp() 中不创建 UI 组件或更改 UI 组件的状态,就可以在主线程中完成“app”的定义。

  2. 我认为没有理由将该类指定为最终类。在最新的教程中,它不再是最终的。请参阅Hello World tutorial

关于java - Swing 事件线程 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40906092/

相关文章:

java - 检查liferay社区是否活跃

java - 用于对集合进行排序的比较器实现

使用 pthreads 的 PHP 多线程,类未加载到 Thread 实例中

java - 如何仅对 JTable 的一部分禁用双击?

java - Netbeans GUI Builder - 如何添加自定义表格单元格渲染器?

java - 如何将参数传递给验证Spring Webflow的方法?

java - Selenium : How to solve org. openqa.selenium.InvalidElementStateException: 无效元素状态

java - 工作线程到工作线程通信

c++ - C++ 11 中的 sleep 排序

java - 数字键盘更有效的方式