java - 如何在 Vaadin 8 中从子线程获取访问 UI 线程

标签 java multithreading vaadin vaadin8

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

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

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

最佳答案

Vaadin 中的首选模式是应用诸如(模型 View 呈现器)之类的 MVP。

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

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

如果您的应用程序容易出现用户急于关闭浏览器、网络状况不佳等情况,您可能需要将 access(..) 包含在 try catch 中并捕获 UIDetachedException,如果浏览器连接突然丢失,则可能会发生这种情况。

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

presenter.getView().updateStatus(true);

关于java - 如何在 Vaadin 8 中从子线程获取访问 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51137436/

相关文章:

java - 更改 vaadin 版本和 vaadin 插件版本后 Vaadin 构建失败

java - 使用 Vaadin 14 中的 "Upload"小部件将文本文件的内容上传到内存中的字符串

java - 公共(public) onPostExecute 方法

java - 用于匹配和排除单词/字符串的正则表达式

java - future 取消不适用于多线程的 executorService

java 桌面应用程序 - JList 选择更改不会更新界面

c++ - 基础服务器占用大量CPU资源——如何缓解?

java - 文件读取最后一行

java - 正则表达式匹配Java中字符串的开头和结尾

java - 在java中使用嵌套泛型