2017-10-13 63 views
1

我想在我的vaadin應用程序中追加一些日誌字符串到textAreaVaadin「run later」func?

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

textArea只在整個功能結束後才改變。 有沒有像在JavaFX的任何功能:

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

或擺動:

EventQueue.invokeLater(changer); 

回答

2

您需要啓用的Vaadin UI「推」,因爲默認情況下該UI的所有更新將被分組並作爲單個響應發送(就像你說的:當函數返回時)。

看一看這個頁面,它解釋了整個安裝非常漂亮:

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

BTW,一旦推啓用後,您需要一個類似的技術,因爲你提到的SwingUtilities.invokeLater

從另一個線程更改UI對象並將它們推送到 瀏覽器需要在訪問UI時鎖定用戶會話。 否則,從另一個線程完成的UI更新可能與 定期事件驅動的更新相沖突,並導致數據損壞或導致死鎖。因此,您只能使用access()方法訪問UI,該方法會鎖定會話以防止發生衝突。它 接受它作爲參數執行的Runnable。

例如:

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