Alternative für SwingWorker

Diskutiere Alternative für SwingWorker im Allgemeine Java-Themen Bereich.
Bitte aktiviere JavaScript!
Thallius

Thallius

Hi,

ich bin dabei gerade eine Swing Desktop Applikation in eine Web-Applikation umzubauen.

Ich benutze da sehr viel den SwingWorker weil ich ihn für asynchrone Berechnungen einfach extrem praktisch finde. Vor allem weil es eben die publish() und process() methode gibt die mir das Handshake mit dem Main Task sehr erleichertern.

Gibt es eine Alternative die die gleiche Funktionalität bereitstellt? Also nicht nur einfach einen Thread starten, sondern auch einen asynchron laufenden Rückkanal der mich über den Fortschritt im Thread informiert?

Gruß

Claus
 
Flown

Flown

Das hört sich stark nach CompletableFutures an oder generell Observables im rx/java Umfeld.
 
Thallius

Thallius

Eigentlich suche ich nur ein einfaches asynchrones messaging system.

Sprich der background task schickt ständig progress informationen an den main task. Diese werden dort aber nicht direkt ausgeführt sondern erst wenn der main task dran kommt nimmt er sich die letzte message aus der queue und verwirft alle anderen.
 
mihe7

mihe7

Sprich der background task schickt ständig progress informationen an den main task. Diese werden dort aber nicht direkt ausgeführt sondern erst wenn der main task dran kommt nimmt er sich die letzte message aus der queue und verwirft alle anderen.
Mir ist nicht klar, was Du eigentlich machen willst. Z. B. wenn nur die letzte Message interessiert, warum sollen dann ständig Nachrichten verschickt werden?
 
Thallius

Thallius

Mir ist nicht klar, was Du eigentlich machen willst. Z. B. wenn nur die letzte Message interessiert, warum sollen dann ständig Nachrichten verschickt werden?
Ok, dann anders: Der background task soll sich nicht darum scheren wie oft seine Daten wirklich angezeigt werden. Wenn ich zum Beispiel 10000 Daten lade, dann schicke ich einfach für jede geladene date eine Message ala 1/10000, 2/10000, 3/10000 .... Das kann ja nun je nach Aufgabe 1 date in der Sekunde sein oder aber auch 1000 daten pro Sekunde.
Ich möchte jetzt nicht das der Maintask im ersten Fall 1000 mal pro sekunde dem Frontend mitteilte das sich die Anzahl der geladenen Daten geändert hat sondern eben nur sagen wir z.B. 10x pro Sekunde egal wie viele Daten bis dahin geladen sind.

Natürlich kann ich das jetzt selber mit irgendwelchen Timern basteln aber ich dachte sowas ist standard (Was es im Falle von Swing ja auch zu sein scheint) und es gibt das irgendwo fertig.

Claus
 
mihe7

mihe7

Ich sehe hier zwei Stellen, an denen man ansetzen kann:
1. im UI (Polling)
2. Observable als Puffer

Skizze:
Java:
public class TimedBuffer<T> {
    private long lastNotification;

    public void set(T value) {
        this.value = value;
        long now = System.currentTimeMillis();
        if (now - durationBetweenUpdatesInMs >= lastNotification) {
            fireEvent();
            lastNotification = now
        }
    }

    public T get() { return value; }
    // ...
}
 
Thema: 

Alternative für SwingWorker

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben