【问题标题】:Vaadin UI not updating while changing UI components from another thread从另一个线程更改 UI 组件时 Vaadin UI 未更新
【发布时间】:2015-08-27 12:30:01
【问题描述】:

我在一个普通的私有函数中有以下代码 sn-p,它是从同一类中的另一个方法调用的(该类称为AdministrationComponent 其中extends CustomComponent)。该组件被添加到TabBarView。我的问题是,你在代码中看到的三个标签没有更新。

new Thread(new Runnable()
    {

      @Override
      public void run()
      {
        while (true)
        {
          try
          {
            Thread.sleep(2000);
          }
          catch (InterruptedException e)
          {
            e.printStackTrace();
          }

          Runnable uiRunnable = () -> {
            DSCXPSStatusInformation dsi = xpsService.getDSCXPSStatusInformation();

            totalSpaceLabel.setValue(String.valueOf(dsi.getTotalSpaceInMB()) + " MB");
            spaceLeftLabel.setValue(String.valueOf(dscxpsStatusInformation.getLeftSpaceInMB()) + " MB");
            uptimeLabel.setValue(String.valueOf(dscxpsStatusInformation.getUptimeInSec()) + " sec");
          };

          UI.getCurrent().access(uiRunnable);
          UI.getCurrent().push();
        }
      }
    }).start();

【问题讨论】:

    标签: java multithreading user-interface vaadin


    【解决方案1】:

    请阅读book of vaadin中关于推送的部分

    您需要启用推送,以便网络服务器可以通知网络浏览器有关 UI 的更改。

    【讨论】:

    • 已激活:@Push (PushMode.MANUAL)
    • 下次用户交互发生时标签是否更新?
    • 如果我离开 TabSheet 并再次访问它,它们就会被更新,因为它是重建的。如果我只是在不同的选项卡之间切换,什么都不会发生。
    • 我想知道UI.getCurrent().push()是不是被触发得太快了,你有没有试过把 push 放在 uiRunnable 块里面? (您尝试过 Push auto 吗?)
    【解决方案2】:

    我找到了答案:我使用的是dscxpsStatusInformation 而不是dsi。我不知道为什么eclipse没有错误。我在这个班级的任何地方都没有dscxpsStatusInformation

    【讨论】:

      猜你喜欢
      • 2014-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多