Java 从另一个线程更改UI组件时未更新Vaadin UI
我在一个普通的私有函数中得到了以下代码片段,它是从同一个类中的另一个方法调用的。该类被称为AdministrationComponent,它扩展了CustomComponent。此组件将添加到TabBarView中。我的问题是,代码中的三个标签没有更新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
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是否启动得太快,您是否尝试过将推送到可运行块中?你试过自动推吗?