Frage

Ich habe gelesen Filthy Rich Clients in letzter Zeit und bemerkte, dass, obwohl die Version von Java 6, dort ist keine Erwähnung des Concurrent Framework. Also, sie sprechen über java.util.Timer und javax.swing.Timer aber nicht über die ExecutorService.

Ich las über die Vorteile von ExecutorService in der Frage " Java Timer vs ExecutorService " und beschlossen, die letztere über die ersteren zu verwenden. Aber das Buch spricht über javax.swing.Timer und die Vorteile für Swing Entwicklung spezifisch zu sein.

Also, bedeutet dies, dass für Swing Entwicklung (Animieren Taste etc.), javax.swing.Timer ist immer noch eine bessere Wahl oder gibt es eine entsprechende Klasse in dem neuen Concurrent-Framework, das es ersetzt?

War es hilfreich?

Lösung

Nun, der Swing-Timer zumindest läuft auf dem EDT, so dass Sie müssen nicht alles wickeln mit Anrufen zu invokeLater. Es entspricht auch schön mit Schaukel, wie es Aktionen, ActionListeners und andere Swing-verwandten Klassen verwendet.

ich mit Swing-Timer für Swing bezogene Aufgaben bleiben würde und das neue gleichzeitige Paket für Dinge verwenden, die beinhalten nicht die GUI zu aktualisieren.

Hier finden Sie aktuelle Timer in Swing-Anwendungen wie es verwenden könnte mehr Informationen enthalten, um die Entscheidung zu schwingen (sorry).

Andere Tipps

Ich würde sagen, dass für einfache Schaukel bezogenes die bessere Wahl die javax.swing.Timer ist aufgrund der genannten Vorteile hier .

  

Beachten Sie, dass die Aufgabe des Swing-Timer   in dem Fall durchgeführt Dispatch   Faden. Dies bedeutet, dass die Aufgabe kann   sicher Komponenten manipulieren, aber es   auch bedeutet, dass die Aufgabe sollte   schnell ausgeführt werden.

Auf der anderen Seite, wenn Sie nicht-Swing im Zusammenhang oder komplexere / langwierige Verarbeitungsvorgänge, die ExecutorService ist sehr robust und ist definitiv der Weg zu gehen durchführen müssen.

Nur ein Vorschlag auf die Ausarbeitung, was bruno geraten, ein Muster Vorteil der ausgezeichneten Java 1.5+ Gleichzeitigkeit Dienstprogramme für die Aufnahme ohne Schwingen zu brechen ist Ihr ExecutorService alles tun, die schweres Heben haben (wie bruno sagte), aber sobald dies geschehen ist, die ExecutorService Thread sollte die Wechselwirkung mit den tatsächlichen UI-Komponenten an die AWT Gewinde in ein lauffähiges Hand von unter Verwendung eines der folgenden:

  • javax.swing.SwingUtilities.invokeAndWait(Runnable doRun)
  • javax.swing.SwingUtilities.invokeLater(Runnable doRun)

Diese Methoden übergeben die runnable durch die AWT Thread ausgeführt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top