代码之家  ›  专栏  ›  技术社区  ›  DrKaoliN

有没有办法防止IWorkbenchWindow关闭?

  •  2
  • DrKaoliN  · 技术社区  · 10 年前

    所以我有我的 IWorkbenchWiondow 对象 window .
    我将此侦听器添加到其中:

    window.addPageListener(new IPageListener()
    {
        @Override
        public void pageOpened(IWorkbenchPage page)
        {
            // method stub
        }
    
        /**
         * Whenever the user tries to close the workbench window, this method gets called.
         */
        @Override
        public void pageClosed(IWorkbenchPage page)
        {
            if (MessageDialog.openQuestion(page.getWorkbenchWindow().getShell(), "Question", "Do you really want to close the application?"))
            {
                // YES, then no problem, close
                return;
            }
            else
            {
                // NO
                System.out.println("Now what?");
            }
        }
    
        @Override
        public void pageActivated(IWorkbenchPage page)
        {
            // method stub
        }
    });
    

    我怎样才能停止 如果用户说 No ?
    或者我怎样才能达到同样的最终结果?

    2 回复  |  直到 10 年前
        1
  •  2
  •   Rüdiger Herrmann    10 年前

    正如@david所说 IWorkbenchListener 有一个 preShutDown 事件,该事件允许通过返回 false .

    当最后一个工作台窗口关闭或通过以下操作关闭工作台 文件>出口 .

    如果你想阻止 IWorkbenchWindow 关闭后,您需要添加 侦听表示工作台窗口的shell。

    例如:

    Shell shell = window.getShell();
    shell.addListener( SWT.Close, new Listener() {
      public void handleEvent( Event event ) {
        MessageBox messageBox = new MessageBox( parentShell, SWT.APPLICATION_MODAL | SWT.YES | SWT.NO );
        messageBox.setText( "Confirmation" );
        messageBox.setMessage( "Close the window?" );
        event.doit = messageBox.open() == SWT.YES;
      }
    } );
    

    设置 doit flag设置为false将阻止关闭/丢弃外壳。

        2
  •  1
  •   David G    10 年前

    注意:我只对这项技术进行了一次最低限度的测试,而且它看起来像预期的那样有效。

    IWorkBenchWindow 获取IWorkbench对象。

    添加 IWorkbenchListener 到工作台对象。

    听众有一个 preShutdown 方法,该方法应允许您否决关闭。