2016-12-01 103 views
0

在此代码中HelloWorldApp只是扩展了JFrame。 为什么我不需要将'app'对象定义放在invokeLater方法中? 为什么'应用程序'需要是最终的?由于Swing事件线程Java

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

你应该阅读有关'匿名内部class'和[知名度](http://stackoverflow.com/questions/7423028/java-local-variable-visibility-in-anonymous-inner-classes-为什么 - 是 - 最终KEYWO) – PeterMmm

回答

2
  1. 所有变化的Swing组件的UI状态已经到EDT(事件指派线程)内完成。因此,只要在构造函数HelloWorldApp()中没有创建UI组件或更改UI组件的状态,就可以在主线程中完成“app”的定义。

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