JavaFX SwingWorker Äquivalent?

9

Gibt es eine JavaFX-Entsprechung zur Java SwingWorker-Klasse?

Ich kenne die Aufgabe von JavaFX, aber damit können Sie nur Veröffentlichen Sie String-Nachrichten oder einen Fortschritt. Ich möchte nur eine Methode im GUI-Thread aufrufen, so wie ich es mit dem SwingWorker gemacht hätte (indem ich Nachrichten eines beliebigen Typs veröffentliche).

Heres ist ein Beispiel dafür, was ich meine:

%Vor%

Lösung

Vielen Dank für Ihre Antworten. Die Lösung, nach der ich gesucht habe, ist Platform.runLater (lauffähiger guiUpdater) .

    
Crine 08.01.2015, 03:15
quelle

3 Antworten

7

Ich würde Ihre SwingWorker wie folgt umschreiben:

%Vor%

Verwendung:

%Vor%

Erläuterung:

Ja, wir haben keine publish() -Methode, wie die SwingWorker in JavaFX, aber in Ihrem Fall ist die Verwendung von updateMessage() ausreichend, da wir einen Listener für diese Eigenschaft registrieren und jede neue Zeile anhängen können Zeit, zu der die Nachricht aktualisiert wird.

Wenn das nicht genug ist, können Sie immer Platform.runLater() um GUI-Updates zu planen. Wenn Sie zu viele GUI-Aktualisierungen durchführen und der GUI-Thread verlangsamt wird, können Sie das folgende Idiom verwenden: Throttling javafx GUI Updates

    
eckig 08.01.2015, 07:47
quelle
0

Abgesehen von der Methode updateMessage , in der Sie nur Zeichenfolgen übergeben können, gibt es die updateValue -Methode, bei der Sie ein ganzes Objekt übergeben können, also glaube ich, dass Sie das auf ähnliche Weise verwenden können. Dieser Ansatz wird im Abschnitt "Eine Aufgabe, die Teilergebnisse zurückgibt" von Task Dokumentation. Ein anderer Ansatz ist der Platform.runLater() -Ansatz, der auch in anderen Antworten erwähnt wird.

Beachten Sie, dass ein wichtiger Unterschied zwischen diesen Ansätzen darin besteht, dass die erste die Ergebnisse zusammenführt, was bedeutet, dass bei mehreren häufigen updateValue-Aufrufen einige weggelassen werden können, um den FX-Thread zu überfluten.

Auf der anderen Seite sendet der Platform.runLater-Ansatz alle Zwischenergebnisse, aber aufgrund der Gefahr, den FX-Thread bei hochfrequenten Updates zu überschwemmen, kann zusätzlicher Aufwand erforderlich sein, um es wie @eckig manuell zu vermeiden in seiner Antwort vorgeschlagen, die auf Throttling javafx gui Updates

verweist     
Marios 27.02.2015 11:43
quelle
-1

Benutze niemals SwingWorker. Dieses Stück Code in der SwingWorker.java-Quelle sollte genug eines Arguments sein, um es nicht zu verwenden:

%Vor%

Stattdessen sollten Sie sich mit Executor und den Diensten vertraut machen die damit einhergehen.

Es hat nichts mit JavaFX zu tun, es ist einfach Java. Ihre Frage bezieht sich jedoch auf JavaFX. Hier ein Beispiel, wie Sie die Benutzeroberfläche in JavaFX-Anwendungs-Threads mit Platform aktualisieren können .runLater () .

    
Roland 08.01.2015 04:06
quelle