我以前用过Vaadin 7。在那里,我可以使用以下代码从子线程访问UI线程:
UI.getCurrent().access(() -> {
status.setVisible(true);
});但目前,我正在从Vaadin 7迁移到Vaadin 8,在Vaadin 8中,UI.getCurrent()从子线程返回null。那么,我们如何从子线程访问UI线程呢?
发布于 2018-07-02 18:38:54
Vaadin中的首选模式是应用MVP之类的东西(模型视图演示者)。
当您通过扩展布局创建视图时,可以使用getUI()方法,该方法在附加布局和视图时返回正确的UI实例。这意味着,在实现视图的类中,还可以实现更新状态的方法,例如:
updateStatus(boolean visible) {
getUI().access(() -> {
status.setVisible(true);
});
}如果您的应用程序容易让用户急切地关闭浏览器,网络条件恶劣,等等,您可能希望包围access(.)在“尝试捕捉”和“捕获UIDetachedException”中,如果浏览器连接突然丢失,则可能会发生这种情况。
后台线程中的进程可以安全地调用此方法,即myView.updateStatus(true)。这通常是通过推荐人完成的。
presenter.getView().updateStatus(true);https://stackoverflow.com/questions/51137436
复制相似问题