在我的Vaadin应用程序的某个地方,只要我使用第二个浏览器进行连接,就会收到此异常
Caused by: java.lang.RuntimeException: A connector with id 22 is already registered!
at com.vaadin.ui.ConnectorTracker.registerConnector(ConnectorTracker.java:133)
它总是在同一个地方发生,但我不知道为什么这个原因必须在其他地方.
我想我可能会从其他会话中窃取UI组件 - 这不是我的意图.目前,我没有看到static我可能在多个会话中使用的任何UI组件实例.
我该怎么调试呢?这已成为一个相当大的项目.有什么要寻找的提示吗?
是的,这通常是因为您附加了已在其他会话中附加的组件.
尝试使用临时记录失败的连接器ConnectorTracker,因此,下次发生时,您可以捕获它.
例如:
public class SomeUI extends UI {
private ConnectorTracker tracker;
@Override
public ConnectorTracker getConnectorTracker() {
if (this.tracker == null) {
this.tracker = new ConnectorTracker(this) {
@Override
public void registerConnector(ClientConnector connector) {
try {
super.registerConnector(connector);
} catch (RuntimeException e) {
getLogger().log(Level.SEVERE, "Failed connector: {0}", connector.getClass().getSimpleName());
throw e;
}
}
};
}
return tracker;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为我可能会从其他会话中窃取 UI 组件 - 这不是我的意图。目前,我没有看到可能在多个会话中使用的 UI 组件的任何静态实例。
就是这样。我实际上是在事先不知情的情况下窃取了 UI 组件。
它很好地隐藏在一个对于所有实例来说似乎都是相同的部分中。这是正确的:算法是相同的。
并不意味着我也应该重用相同的 UI 组件......
感谢那些仔细观察的人。
| 归档时间: |
|
| 查看次数: |
4100 次 |
| 最近记录: |