瓦丁。 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 以使其每个控件使用自己的计时器。它似乎解决了这个问题。但是这个解决方案对我来说并不完美:单个计时器比许多计时器更好,而且它们实际上做的工作是一样的。但到目前为止我不知道如何以其他方式解决这个问题..