2016-12-01 81 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