2017-10-13 10 views
1

私のvaadinアプリのtextAreaにいくつかのログ文字列を追加します。Vaadin "run later" func?

VaadinSqlApplication.logger.info("Export start"); 
logTextArea.setValue("Export Start"); 
... 
logTextArea.setValue("Export done"); 

しかし、textAreaは、機能がすべて終了した後に変更されました。

Platform.runLater(new Runnable() { 
       @Override 
       public void run() { 
        //change text 
      }); 

やスイング中:

EventQueue.invokeLater(changer); 

答えて

2

UIに対するすべての更新がグループ化されますデフォルトではとあなたは、Vaadin UI上の「プッシュ」を有効にする必要があり JavaFXの中のような任意の関数があります単一のレスポンスとして送信されます(あなたが言うように:関数が返すとき)。

は、このページを見てください、それは非常にうまく、全体のセットアップについて説明します。

https://vaadin.com/docs/v8/framework/advanced/advanced-push.html

プッシュを有効にするとところで、あなたははあなたが言及したSwingUtilities.invokeLaterと同様の技術が必要になります。

別のスレッドからUIオブジェクトを変更して にプッシュすると、UIにアクセスするときにユーザーセッションをロックする必要があります。 それ以外の場合は、別のスレッドから実行されたUIの更新が、通常のイベントドリブンの更新 と競合し、データの破損または デッドロックが発生する可能性があります。このため、 access()メソッドを使用してUIにアクセスするだけで、競合を防ぐためにセッションがロックされます。 は、そのパラメータとして実行するRunnableをとります。例えば

ui.access(new Runnable() { 
    @Override 
    public void run() { 
     ... 
    } 
});