Java 从另一个线程更改UI组件时未更新Vaadin UI

Java 从另一个线程更改UI组件时未更新Vaadin UI,java,multithreading,user-interface,vaadin,Java,Multithreading,User Interface,Vaadin,我在一个普通的私有函数中得到了以下代码片段,它是从同一个类中的另一个方法调用的。该类被称为AdministrationComponent,它扩展了CustomComponent。此组件将添加到TabBarView中。我的问题是,代码中的三个标签没有更新 new Thread(new Runnable() { @Override public void run() { while (true) { t

我在一个普通的私有函数中得到了以下代码片段,它是从同一个类中的另一个方法调用的。该类被称为AdministrationComponent,它扩展了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();

请阅读有关推入的部分


您需要启用推送功能,以便Web服务器可以通知Web浏览器UI中的更改。

我找到了答案:我使用的是dscxpsStatusInformation,而不是dsi。我不知道为什么eclipse中没有错误。此类中没有DSCXPSStatus信息。

它已激活:@Push PushMode.manuals标签是否在下次用户交互时更新?如果我离开选项卡页并再次访问它,它们将被更新,因为它将重新生成。如果我只是在不同的选项卡之间切换,什么都不会发生。我想知道UI.getCurrent.push是否启动得太快,您是否尝试过将推送到可运行块中?你试过自动推吗?