我想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)
您需要在 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)