我以前使用过Vaadin 7。我可以使用以下代码从子线程访问UI线程:-
UI.getCurrent().access(() -> {
status.setVisible(true);
});
但是目前,我正在从Vaddin 7迁移到Vaadin8。在Vaadin 8中,UI.getCurrent()从子线程中返回null。那么如何从子线程访问UI线程呢?
答案 0 :(得分:2)
Vaadin中的首选模式是应用MVP之类的东西(例如Model View Presenter)。
当通过扩展布局创建视图时,可以使用getUI()方法,该方法在附加了Layout&View时返回正确的UI实例。这意味着在实现View的类中,您还可以实现更新状态的方法,例如:
updateStatus(boolean visible) {
getUI().access(() -> {
status.setVisible(true);
});
}
如果您的应用程序容易导致用户急于关闭浏览器,不良的网络状况等,您可能希望将access(..)包含在try catch and catch UIDetachedException中,如果浏览器突然断开连接,可能会发生这种情况。 >
您在后台线程中的进程可以安全地调用此方法,即myView.updateStatus(true)。通常这是通过演示者完成的
presenter.getView().updateStatus(true);