Java - Unterschied zwischen SwingWorker und SwingUtilities.invokeLater ()

SwingWorker wird für folgende Zwecke verwendet:

Zum Ausführen von Aufgaben mit langer Laufzeit in einem anderen Thread, um zu verhindern, dass die Benutzeroberfläche nicht mehr reagiertUm die GUI mit den Ergebnissen zu aktualisieren, die von der Langzeitaufgabe am Ende der Aufgabe durch @ erzeugt wurdedone() MethodeZur Aktualisierung der Benutzeroberfläche von Zeit zu Zeit mit den Zwischenergebnissen, die von der Aufgabe mithilfe von @ erstellt und veröffentlicht wurdepublish() undprocess() Methoden.

SwingUtilities.invokeLater() kann die obigen Aufgaben wie folgt ausführen:

Anstelle der Ausführung vonSwingWorker.execute() Methode aus dem EDT können wir ausführenExecutorService.submit(new MyRunnable()) da es auch einen anderen Thread erstellt, der eine lang laufende Aufgabe ausführen kann.Um die GUI am Ende der Aufgabe zu aktualisieren, können wir Code einfügen (geschrieben indone() method of case1)SwingUtilites.invokeLater(new RunnableToExecuteDoneMethodCode()) am Ende der Aufgabe.Um die GUI in der Mitte der Aufgabe zu aktualisieren, können wir Code einfügen (geschrieben inprocess() method of case1)SwingUtilites.invokeLater(new RunnableToExecuteProcessMethodCode()) an der Stelle, an der wir @ angerufen habpublish() Methode in case1.

Ich stelle diese Frage, weil das Problem in Frage @ angegebJava - SwingWorker - Können wir einen SwingWorker von einem anderen SwingWorker anstelle von EDT @ anrufe kann gelöst werden durchSwingUtilities.invokeLater() kann aber nicht mit @ gelöst werdSwingWorker

Antworten auf die Frage(4)

Ihre Antwort auf die Frage