代码之家  ›  专栏  ›  技术社区  ›  masiboo

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

  •  0
  • masiboo  · 技术社区  · 7 年前

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

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

    但目前,我正从瓦丁7号迁移到瓦丁8号。在vaadin 8 ui.getcurrent()中,从子线程返回空值。那么我们如何从子线程访问UI线程呢?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Tatu Lund    7 年前

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

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

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

    如果您的应用程序容易出现用户急于关闭浏览器、网络状况不佳等情况,您可能希望在Try-Catch和Catch-UideTachedException中包围访问(..),如果浏览器连接突然断开,则可能会发生这种情况。

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

    presenter.getView().updateStatus(true);