2016-05-11 5 views
0

2つのjavafx.concurrent.Serviceをどのように同期させるかを考えています。 各サービスは、データをロードするためにRESTエンドポイントを呼び出しています。私は両方のサービスを同期するのが好きです。 両方のサービスを読み込んだ場合にのみ、私は画面要素を更新したいと思います。 両方のサービスがEventHandlerコールバックを処理しています。 JavaFxに標準パターンがありますか?JavaFxは2つのサービスを同期します

ご協力いただきありがとうございます。

よろしく、 マヌエル

答えて

1

簡単な解決策は、サービスのWorker.Stateに耳を傾けることができます

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

のJava 8がオプションである場合、あなたはそのCompletableFutureを見て持つことができ、使用例

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

CompletableFuture<Void> finished = CompletableFuture.allOf(future1, future2); 
     finished.thenRun(() -> { 
      Platform.runLater(() -> { 
       // updateUI 
      }); 
     }); 
関連する問題