2017-10-13 38 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() { 
     ... 
    } 
});