我想在我的vaadin应用程序中将一些日志字符串附加到textArea
。
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);
在Vaadin UI上启用"push",因为默认情况下,对UI的所有更新都将分组并作为单个响应发送(就像您说的:当函数返回时)。
看看这个页面,它很好地解释了整个设置:
https://vaadin.com/docs/v8/framework/advanced/advanced-push.html
顺便说一句,启用推送后,您将需要与您提到的SwingUtilities.invokeLater
类似的技术:
从另一个线程对 UI 对象进行更改并将其推送到 浏览器在访问 UI 时需要锁定用户会话。 否则,从另一个线程完成的 UI 更新可能会与 定期事件驱动的更新,并导致数据损坏或 僵局。因此,您只能使用 access() 方法,它锁定会话以防止冲突。它 将它执行的 Runnable 作为其参数。
例如:
ui.access(new Runnable() {
@Override
public void run() {
...
}
});