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

Java 如何从Vaadin 8中的子线程获取访问UI线程,java,multithreading,vaadin8,Java,Multithreading,Vaadin8,我以前用过瓦丁7。在那里,我可以使用以下代码从我的子线程访问UI线程: UI.getCurrent().access(() -> { status.setVisible(true); }); 但目前,我正在从瓦丁7号迁移到瓦丁8号。在vaadin8ui中,getCurrent()从子线程返回null。那么,我们如何从子线程访问UI线程呢?Vaadin中的首选模式是应用MVP之类的东西(模型视图演示器) 通过扩展布局创建视图时,可以使用方法,该方法在附加布局

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

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

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

Vaadin中的首选模式是应用MVP之类的东西(模型视图演示器)

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

updateStatus(boolean visible) {
     getUI().access(() -> {
          status.setVisible(true);
     });
}
如果您的应用程序容易出现用户急切关闭浏览器、网络状况不佳等情况,您可能希望在try-catch和catch-UIDetachedException中包围访问(..),如果浏览器连接突然丢失,可能会发生这种情况

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

presenter.getView().updateStatus(true);

Vaadin中的首选模式是应用MVP(模型视图演示器)

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

updateStatus(boolean visible) {
     getUI().access(() -> {
          status.setVisible(true);
     });
}
如果您的应用程序容易出现用户急切关闭浏览器、网络状况不佳等情况,您可能希望在try-catch和catch-UIDetachedException中包围访问(..),如果浏览器连接突然丢失,可能会发生这种情况

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

presenter.getView().updateStatus(true);

第二个选项是在演示者的构造函数(UI=UI.getCurrent())中存储UI引用,因为它也在UI上下文和安全中调用,然后在以后使用UI.access(..)。第二个选项是在演示者的构造函数(UI=UI.getCurrent())中存储UI引用,因为它也在UI上下文和安全中调用,然后使用UI.access(..)。