【问题标题】:Swing Event Thread JavaSwing 事件线程 Java
【发布时间】:2016-12-01 08:46:37
【问题描述】:

在这段代码中,HelloWorldApp 只是扩展了 JFrame 。 为什么我不需要将“app”对象定义放在 invokeLater 方法中? 为什么'app'需要是最终的?谢谢

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

【问题讨论】:

  • 你应该阅读anonymous inner classvisibility

标签: java multithreading swing jframe event-dispatch-thread


【解决方案1】:
  1. Swing 组件的 UI 状态的所有更改都必须在 EDT(事件调度线程)内完成。因此,只要在构造函数HelloWorldApp()不创建UI组件或改变UI组件的状态,就可以在主线程中定义'app'。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2010-10-25
    相关资源
    最近更新 更多