如何从 Vaadin 8 中的子线程访问 UI 线程
How to get access UI thread from child thread in Vaadin 8
我以前用过Vaadin 7。在那里,我可以使用以下代码从我的子线程访问 UI 线程:
UI.getCurrent().access(() -> {
status.setVisible(true);
});
但目前,我正在从 Vaadin 7 迁移到 Vaadin 8。在 Vaadin 8 UI.getCurrent() returns 中,子线程为 null。那么我们如何才能从子线程访问UI线程呢?
Vaadin 中的首选模式是应用诸如(模型视图演示器)之类的 MVP。
当您通过扩展布局创建视图时,您可以使用 getUI() 方法,当附加布局和视图时,returns 正确 UI 实例。这意味着在您的 class 实现视图中,您还可以实现更新状态的方法,例如:
updateStatus(boolean visible) {
getUI().access(() -> {
status.setVisible(true);
});
}
如果您的应用程序容易出现用户急切关闭浏览器、网络状况不佳等情况,您可能希望在 try catch 和 catch 中包围 access(..) UIDetachedException,如果浏览器可能会发生连接突然断开。
您在后台线程中的进程可以安全地调用此方法,即 myView.updateStatus(true)。通常这是通过 Presenter
完成的
presenter.getView().updateStatus(true);
我以前用过Vaadin 7。在那里,我可以使用以下代码从我的子线程访问 UI 线程:
UI.getCurrent().access(() -> {
status.setVisible(true);
});
但目前,我正在从 Vaadin 7 迁移到 Vaadin 8。在 Vaadin 8 UI.getCurrent() returns 中,子线程为 null。那么我们如何才能从子线程访问UI线程呢?
Vaadin 中的首选模式是应用诸如(模型视图演示器)之类的 MVP。
当您通过扩展布局创建视图时,您可以使用 getUI() 方法,当附加布局和视图时,returns 正确 UI 实例。这意味着在您的 class 实现视图中,您还可以实现更新状态的方法,例如:
updateStatus(boolean visible) {
getUI().access(() -> {
status.setVisible(true);
});
}
如果您的应用程序容易出现用户急切关闭浏览器、网络状况不佳等情况,您可能希望在 try catch 和 catch 中包围 access(..) UIDetachedException,如果浏览器可能会发生连接突然断开。
您在后台线程中的进程可以安全地调用此方法,即 myView.updateStatus(true)。通常这是通过 Presenter
完成的presenter.getView().updateStatus(true);