Vaadin UI分离异常

Vaadin UI分离异常,vaadin,Vaadin,我正在使用Vaadin 7.7.10,在使用后台线程和@Push注释时,我在日志中看到许多UIDetachedException 请建议如何正确释放资源以清理我的日志。这是因为用户关闭了浏览器窗口或选项卡,这意味着特定的UI实例不再使用 最好的方法通常是覆盖应用程序UI子类中的detach方法并在那里进行清理。只需记住还要调用super.detach() 另一种方法是捕获UI.access可能引发的uidetachedeexception,并在该点执行清理。这种方法的缺点是,当用户界面分离时,您

我正在使用Vaadin 7.7.10,在使用后台
线程和
@Push
注释时,我在日志中看到许多
UIDetachedException


请建议如何正确释放资源以清理我的日志。

这是因为用户关闭了浏览器窗口或选项卡,这意味着特定的UI实例不再使用

最好的方法通常是覆盖应用程序UI子类中的
detach
方法并在那里进行清理。只需记住还要调用
super.detach()


另一种方法是捕获
UI.access可能引发的
uidetachedeexception
,并在该点执行清理。这种方法的缺点是,当用户界面分离时,您不会立即收到通知,而只有在尝试对其进行操作时才会收到通知。

如果您在
UI中进行操作。访问(…)
已分离的
UI
,您将触发
UIDetachedException
。这是很自然的,例如用户关闭了浏览器,或者网络中有东西关闭了连接,因此
UI
被分离。如果在您的案例中,由于这些原因发生了
UIDetachedException
,那么它是无害的。在这种情况下,您可以通过检查
UI.isAttached()
避免乱扔日志,如果
UI
已分离,则返回
false
;如果
UI
已放入清理队列,则返回
UI.isClosing()

请显示一些与此相关的代码。你确定它们是一个问题,不仅仅是用户留下的会话吗?这里建议的方法有一个小问题。在运行
UI.isAttached()
UI.access(handler)
时,UI很可能会分离。您仍然可以排除大多数异常,但不是所有异常。这是正确的。但是,我在现实生活中没有看到这种情况。是否也可以通过重写
com.vaadin.flow.Component.Component#ondeach
组件
子类中执行清理?