Vaadin"id xy的连接器已经注册"

Atm*_*ons 11 vaadin

在我的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组件实例.

我该怎么调试呢?这已成为一个相当大的项目.有什么要寻找的提示吗?

Jos*_*tin 6

是的,这通常是因为您附加了已在其他会话中附加的组件.

尝试使用临时记录失败的连接器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)


Atm*_*ons 1

我认为我可能会从其他会话中窃取 UI 组件 - 这不是我的意图。目前,我没有看到可能在多个会话中使用的 UI 组件的任何静态实例。

就是这样。我实际上是在事先不知情的情况下窃取了 UI 组件。

它很好地隐藏在一个对于所有实例来说似乎都是相同的部分中。这是正确的:算法是相同的。

并不意味着我也应该重用相同的 UI 组件......

感谢那些仔细观察的人。