2016-12-01 2 views
0

In diesem Code erweitert HelloWorldApp einfach JFrame. Warum muss ich die App-Objektdefinition nicht in die invokeLater-Methode einfügen? Und warum 'app' muss endgültig sein? DankSwing Event Thread Java

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

Sie sollten über 'anonymen inneren CLASS' lesen und [Sichtbarkeit] (http://stackoverflow.com/questions/7423028/java-local-variable-visibility-in-anonymous-inner-classes- warum-ist-final-keywo) – PeterMmm

Antwort

2
  1. Alle Änderungen an den UI-Zustand der Swing-Komponenten hat im EDT (Event Dispatch Thread) erfolgen. Daher kann die Definition der "App" im Hauptthread erfolgen, solange im Konstruktor HelloWorldApp() keine UI-Komponenten erstellt werden oder der Status von UI-Komponenten geändert wird.

  2. Ich sehe keinen Grund für die Angabe der Klasse als endgültig. Im letzten Tutorial ist es nicht mehr endgültig. Siehe Hello World tutorial