首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Vaadin 8中从子线程获取访问UI线程

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

Stack Overflow用户
提问于 2018-07-02 13:32:32
回答 1查看 1.2K关注 0票数 0

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

代码语言:javascript
复制
    UI.getCurrent().access(() -> {
        status.setVisible(true);
    });

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 18:38:54

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

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

代码语言:javascript
复制
updateStatus(boolean visible) {
     getUI().access(() -> {
          status.setVisible(true);
     });
}

如果您的应用程序容易让用户急切地关闭浏览器,网络条件恶劣,等等,您可能希望包围access(.)在“尝试捕捉”和“捕获UIDetachedException”中,如果浏览器连接突然丢失,则可能会发生这种情况。

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

代码语言:javascript
复制
presenter.getView().updateStatus(true);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51137436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档