2013-03-08 5 views
22

Nach Jahren der Java-Programmierung habe ich immer verwendet meine main() Methoden wie diese zu erstellen:Warum SwingUtilities.invokeLater in der Hauptmethode verwenden?

public static void main(String[] args) 
{ 
    runProgram(); 
} 

Aber vor kurzem studierte ich einige Codes aus dem Internet und sah dies manchmal statt der üblichen main() Verwendung oben:

public static void main(String[] args) 
{ 
    SwingUtilities.invokeLater(new Runnable() 
    { 
     public void run() 
     { 
      runProgram(); 
     } 
    }); 
} 

ich möchte einfach wissen:

  • Warum dies der üblichen main() wa stattdessen verwenden y? Ich sehe keinen Unterschied, wenn ich es versuche.
  • Was ist der Unterschied zwischen diesen beiden Möglichkeiten?

Danke für das Lesen mich und Ihre Antworten.

Antwort

23

Die Dokumente erklären warum. Von Initial Threads

Warum erstellt der ursprüngliche Thread nicht einfach die GUI selbst? Da fast der gesamte Code, der Swing-Komponenten erstellt oder mit diesen interagiert, auf dem Ereignis-Dispatch-Thread ausgeführt werden muss.

und von The Event Dispatch Thread

Einige Swing-Komponente Verfahren markiert werden "threadsicher" in der API-Spezifikation; Diese können von jedem Thread aus sicher aufgerufen werden. Alle anderen Swing-Komponentenmethoden müssen vom Ereignisversand-Thread aufgerufen werden. Programme, die diese Regel ignorieren, funktionieren möglicherweise die meiste Zeit korrekt, unterliegen jedoch unvorhersehbaren Fehlern, die schwer zu reproduzieren sind.

+0

Ich sehe, sehr interessant. Danke für die Links und das Wesentliche hervorgehoben. – Rob

14

Da der Thread "main" Gestartet von VM ist nicht der Event Dispatch Thread.

3

Einige Swing-Komponenten aus der API sind nicht Thread-sicher, was bedeutet, dass sie einige Probleme wie Deadlock verursachen können. Daher ist es besser, solche Swing-Komponenten zu erstellen und zu aktualisieren, indem Sie den von Swing bereitgestellten Event-Dispatcher-Thread verwenden Thread oder irgendein anderer Thread, der von main erstellt wurde.

Verwandte Themen