瓦丁。 UI没有附加怎么办?
Vaadin. What to do when UI is not attached?
我有以下情况。在我的应用程序中,我使用 Java 的 TimerTask 定期更新一些控件值。
更新方法如下所示:
public void updateDates()
{
if(!myUI.get().isAttached())
return;
myUI.get().access(() -> {
isAsyncUpdate = true;
resetUnmodified();
isAsyncUpdate = false;
myUI.get().push();
});
}
好的,一旦用户登录,一切都会更新w/o任何问题。假设用户注销,然后同一用户登录。之后 isAttached() 方法 return false。
我不明白为什么会发生这种情况以及如何克服这种情况(
我该如何解决这个问题?
提前感谢您的帮助
您应该使用静态方法 UI.getCurrent(),然后将其转换为您自己的 myUI,这样您就可以确保获得当前使用的 UI 肯定已附加。
看来我找到了问题的根源。我使用单个计时器对象来处理所有控件。现在我重构了 class 以使其每个控件使用自己的计时器。它似乎解决了这个问题。但是这个解决方案对我来说并不完美:单个计时器比许多计时器更好,而且它们实际上做的工作是一样的。但到目前为止我不知道如何以其他方式解决这个问题..
我有以下情况。在我的应用程序中,我使用 Java 的 TimerTask 定期更新一些控件值。 更新方法如下所示:
public void updateDates()
{
if(!myUI.get().isAttached())
return;
myUI.get().access(() -> {
isAsyncUpdate = true;
resetUnmodified();
isAsyncUpdate = false;
myUI.get().push();
});
}
好的,一旦用户登录,一切都会更新w/o任何问题。假设用户注销,然后同一用户登录。之后 isAttached() 方法 return false。 我不明白为什么会发生这种情况以及如何克服这种情况( 我该如何解决这个问题?
提前感谢您的帮助
您应该使用静态方法 UI.getCurrent(),然后将其转换为您自己的 myUI,这样您就可以确保获得当前使用的 UI 肯定已附加。
看来我找到了问题的根源。我使用单个计时器对象来处理所有控件。现在我重构了 class 以使其每个控件使用自己的计时器。它似乎解决了这个问题。但是这个解决方案对我来说并不完美:单个计时器比许多计时器更好,而且它们实际上做的工作是一样的。但到目前为止我不知道如何以其他方式解决这个问题..