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 № 1Die 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 repaint
Dies 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 Thread
Sie 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