# SwingUtilities.invokeLater()



## BananenHarry (8. Mai 2008)

Hallo,

Ich hab neulich mit einem Freund diskutiert, und er hat noch nie SwingUtilities.invokeLater() benötigt.

Es geht ja dabei um die Threadsicherheit von Swing.

Muß ich das jetzt verwenden, oder kann ich das auch weglassen.

Wann genau gibt es Probleme ?

Nur wenn man mit "graphics" auf Panels zeichnet, wegen repaint() ?


----------



## Wildcard (8. Mai 2008)

Wann immer ein anderer Thread als der Event Dispatch Thread die Oberfläche über eine nicht threadsichere Methode (fast alle) manipuliert (direkt, oder indirekt) muss mit invokeLater oder invokeAndWait synchronisiert werden.


----------



## Gast (8. Mai 2008)

Danke, das ist ein sehr gute knappe Zusammenfassung.
Hab ich mir ausgedruckt !


----------



## André Uhres (8. Mai 2008)

BananenHarry hat gesagt.:
			
		

> Nur wenn man mit "graphics" auf Panels zeichnet, wegen repaint() ?


*repaint()* ist threadsafe. Gerade da brauchst du kein invokeLater :wink:


----------



## Guest (8. Mai 2008)

Wildcard hat gesagt.:
			
		

> Wann immer ein anderer Thread als der Event Dispatch Thread die Oberfläche über eine nicht threadsichere Methode (fast alle) manipuliert (direkt, oder indirekt) muss mit invokeLater oder invokeAndWait synchronisiert werden.



und wann welches?


----------



## byte (8. Mai 2008)

Lässt sich nicht pauschalisieren, aber in den meisten Fällen wohl invokeLater(), da sonst die Nebenläufigkeit des zweitens Threads obsolet wäre. Bei invokeAndWait() schläft Dein Thread, bis der EDT die Anfrage bearbeitet hat. Bei invokeLater() arbeitet er sofort weiter.


----------



## André Uhres (8. Mai 2008)

In einem Applet muß die GUI-Erzeugung mit invokeAndWait in der init Methode gestartet werden; andernfalls kann init zu Ende sein, bevor die GUI erstellt ist, was Probleme für den Web Browser verursachen kann, der das Applet startet.


----------



## GUI-Programmer (19. Jul 2011)

Pauschal gefragt: Was ist nun besser? invokeLater oder invokeAndWait ? oder sollte man bei einem JFrame invokeLater und bei einem Applet invokeAndWait verwenden. Bitte antworten.


----------



## Gast2 (19. Jul 2011)

GUI-Programmer hat gesagt.:


> Bitte antworten



ähm lol?


----------



## Tomate_Salat (19. Jul 2011)

GUI-Programmer hat gesagt.:


> Bitte antworten.



Du hast die Posts über deinem gelesen, ja?


----------



## GUI-Programmer (19. Jul 2011)

OK. Applet invokeAndWait, Frame invokeLater. Verstanden.


----------



## Volvagia (20. Jul 2011)

Nicht umbedingt. AndWait pausiert eben den aufrufenden Thread, was in seltenen Fällen nützlich oder sogar benötigt werden kann, bremst aber eben auch den aktuellen Thread sehr stark aus, sollte deshalb nur mit großer Vorsicht benutzt werden. Du musst bedenken, dass bei fast jeder Aktion, auch wenn es nur ein MouseEntered ist ein Event gefeuert wird. Bei größeren Programmen kann der EDT deshalb fast ununterbrochen beschäftigt sein.

Mehrere Repaints können vom RepaintManager zu einen zusammengefasst werden, deshalb sollten die nur so drauf los gefeuert werden damit immer so schnell wie möglich alles da ist. (Einfach ausgedrückt. ^^)


----------



## Tomate_Salat (20. Jul 2011)

GUI-Programmer hat gesagt.:


> OK. Applet invokeAndWait, Frame invokeLater. Verstanden.



Also nicht. Ich habe ihn gelesen und konnte da wesentlich mehr Informationen bekommen. Sorry, aber mir kommt es so vor, als ob du nur den Post von André (welcher vor deinem letzten war) gelesen. Deine Antwort steht schon in dem Thread, man muss nur richtig lesen :rtfm:


----------

