Vaadin Sub-Window 不关闭

Vaadin Sub-Window Does not close

我创建的subwindow没有关闭。我看到有些人遇到了同样的问题并发布了同样的问题,但我仍然找不到解决方案。我检查了 this, and this ,and this,and that,但找不到解决方案。这是我下面的代码,用于 window 的相应 class:

public class CommunicationConfigWindow extends Window
{
   private static CommunicationConfigWindow INSTANCE;    
   private final Accordion catAccordion = new Accordion();    
   private final VerticalLayout layout = new VerticalLayout();    
   private final HorizontalLayout toolbar = new HorizontalLayout();    
   private final Button applyButton = new Button( "Save&Close" );    
   private final Button cancelButton = new Button( "Cancel" );
    
   private CommunicationConfigWindow( )
   {
      this.toolbar.setDefaultComponentAlignment( Alignment.MIDDLE_CENTER );
      this.applyButton.setSizeFull();

      this.cancelButton.addClickListener( e -> {
         UI.getCurrent().removeWindow( this );
         this.close();
      } );
      this.applyButton.addStyleName( ValoTheme.BUTTON_FRIENDLY );
      this.cancelButton.addStyleName( ValoTheme.BUTTON_DANGER );

      this.cancelButton.setSizeFull();
      this.toolbar.addComponents( this.cancelButton, this.applyButton );
      this.toolbar.setSizeFull();
      this.catAccordion.addTab( new GeneralCatLayer( CatVersionEnum.CAT21 ), "CAT 21" );
      this.catAccordion.addTab( new GeneralCatLayer( CatVersionEnum.CAT23 ), "CAT 23" );
      this.catAccordion.addTab( new GeneralCatLayer( CatVersionEnum.CAT247 ), "CAT 247" );
      this.layout.addComponents( this.catAccordion, this.toolbar );
      this.setContent( this.layout );

   }


   public static CommunicationConfigWindow getINSTANCE()
   {
      if ( CommunicationConfigWindow.INSTANCE == null )
      {
         CommunicationConfigWindow.INSTANCE = new CommunicationConfigWindow();
      }
      return CommunicationConfigWindow.INSTANCE;
   }


}

This is before I click on cancel. This is after I click on cancel.

我确实从 Display Settings Button 弹出这个 window。发生的事情是:

  1. 我单击“显示设置”按钮,window 弹出。
  2. 之前 我点击取消,我点击显示设置按钮,它没有创建一个新的 window 因为它是单例。
  3. 我点击取消并再次点击显示设置按钮,旧的乱七八糟的按钮留在那里并创建了一个新的 window。

我基本上希望 window 在我单击取消或关闭按钮时消失,但它只是 not.Why?

提前致谢。

可能是你的单例问题。你真的需要单例 window ?

如果您只想添加一个 window 单击按钮。您可以尝试进行一些验证,例如

 Window yourWindow = new Window();
        if (UI.getCurrent().getWindows().contains(yourWindow)) {
            getUI().addWindow(yourWindow);
        }

覆盖 window class

中的等号

我没有改变任何东西,花了 2 个小时后,它开始工作了,尽管我没有改变任何东西,我也不知道为什么。