如何从 Vaadin 8 中的子线程获取访问 UI 线程



我以前用过Vaadin 7。在那里,我可以使用以下代码从我的子线程访问 UI 线程:

UI.getCurrent().access(() -> {
status.setVisible(true);
});

但目前,我正在从 Vaadin 7 迁移到 Vaadin 8。在 Vaadin 8 UI.getCurrent(( 中,从子线程返回 null。那么我们如何从子线程访问 UI 线程呢?

Vaadin 中的首选模式是应用类似 MVP 的内容(模型视图演示器(。

当你通过扩展布局来创建视图时,你可以使用 getUI(( 方法,该方法在附加布局和视图时返回正确的 UI 实例。这意味着在您的类实现 View 中,您还可以实现更新状态的方法,例如:

updateStatus(boolean visible) {
getUI().access(() -> {
status.setVisible(true);
});
}

如果您的应用程序容易出现用户急切关闭浏览器、网络状况不佳等情况,您可能希望在 try catch 和 catch UIDetachedException 中包围访问(..(,如果浏览器连接突然丢失,可能会发生这种情况。

后台线程中的进程可以安全地调用此方法,即 myView.updateStatus(true(。通常这是通过演示者完成的

presenter.getView().updateStatus(true);

最新更新