/ / Event Dispatching Thread-Ausführung - Java, Swing, Benutzeroberfläche, Event-Dispatch-Thread

Event Dispatching Thread-Ausführung - Java, Swing, Benutzerschnittstelle, Event-Dispatch-Thread

Mit Java Swing ist es möglich, den aktuellen Thread anzuhalten Runnable und dem Event Dispatching Thread Raum geben, um das GUI zu aktualisieren?

Ich weiß, dass es mit Multithreading möglich ist (SwingWorker class) aber ich habe mich gefragt, ob es einen einfacheren Weg gibt, dies für Single-Threaded-Programme zu erreichen (alias: Mein ganzer Code ist in den Gui "s") Run()).

Z.B. Matlab hat das sehr bequem drawnow; Methode

Wenn nicht: Wie kann ich die Aktualisierungsaufgabe in einen zweiten Thread aufteilen, ohne etwas neu schreiben zu müssen? Wäre das das Aktualisierung der GUI aus einem laufenden Thread von dieser Link?

Antworten:

2 für die Antwort № 1

Die kurze Antwort lautet nein. Wenn Sie den aktuellen Thread anhalten (was Ihrer Meinung nach der EDT ist), halten Sie den EDT an

Sie können anfordern, dass die Benutzeroberfläche mit Methoden wie aktualisiert wird repaintDies setzt jedoch voraus, dass Sie den EDT nicht mit Dingen wie Schleifen und Pausen blockieren, da der EDT Zeit benötigt, um diese Anforderungen zu verarbeiten.

Und nein, ich würde dem Ratschlag des Links nicht folgen, da er den einzelnen Swing-Thread verletzt, indem er die Komponenten außerhalb des EDT aktualisiert

Abhängig von Ihren Bedürfnissen benötigen Sie entweder eine javax.swing.Timer oder SwingWorker. Ja, du kannst ein ThreadSie werden dafür verantwortlich, dass alle Aktualisierungen der Benutzeroberfläche mit dem EDT synchronisiert werden, für das die beiden anderen Mechanismen vorschlagen.

Sieh dir das an Parallelität in Swing für mehr Details