Vaadin“稍后运行”功能?

Sün*_*iÚr 2 java vaadin

我想textArea在我的 vaadin 应用程序中附加一些日志字符串。

VaadinSqlApplication.logger.info("Export start");
logTextArea.setValue("Export Start");
...
logTextArea.setValue("Export done");
Run Code Online (Sandbox Code Playgroud)

textArea只有在整个功能结束后才改变。是否有类似 JavaFX 的功能:

Platform.runLater(new Runnable() {
                @Override
                public void run() {
                    //change text
            });
Run Code Online (Sandbox Code Playgroud)

或摆动:

    EventQueue.invokeLater(changer);
Run Code Online (Sandbox Code Playgroud)

gee*_*rt3 5

您需要在 Vaadin UI 上启用“推送”,因为默认情况下,对 UI 的所有更新都将分组并作为单个响应发送(就像您说的:当函数返回时)。

看看这个页面,它很好地解释了整个设置:

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() {
        ...
    }
});
Run Code Online (Sandbox Code Playgroud)