2016-05-11 7 views
0

Ich bin auf der Suche nach einer Idee, wie zwei javafx.concurrent.Service zu synchronisieren. Jeder Dienst ruft einen REST-Endpunkt zum Laden von Daten auf. Ich möchte beide Dienste synchronisieren. Nur wenn beide Dienste gelesen werden, möchte ich meine Bildschirmelemente aktualisieren. Beide Dienste arbeiten mit EventHandler-Callbacks. Gibt es dafür ein Standardmuster in JavaFx?JavaFx zwei Dienste synchronisieren

Vielen Dank für Ihre Unterstützung.

Grüße, Manuel

Antwort

1

Eine einfache Lösung für das Worker.State der Dienste zu hören sein könnte:

firstService.stateProperty().isEqualTo(State.SUCCEEDED) 
       .and(secondService.stateProperty().isEqualTo(State.SUCCEEDED)) 
        .addListener((ov, b, b1) -> { 
         if(b1){ 
          // udpateUI 
         } 
        }); 

Wenn Java 8 ist eine Option, können Sie einen Blick auf seine CompletableFuture haben, und Verwenden Sie z

CompletableFuture<Void> future1 = CompletableFuture.runAsync(() -> service1); 
CompletableFuture<Void> future2 = CompletableFuture.runAsync(() -> service2); 

CompletableFuture<Void> finished = CompletableFuture.allOf(future1, future2); 
     finished.thenRun(() -> { 
      Platform.runLater(() -> { 
       // updateUI 
      }); 
     });