有没有办法阻止IWorkbenchWindow关闭?

时间:2015-08-17 15:39:17

标签: java eclipse-plugin eclipse-rcp eclipse-pde

所以我有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
    }
});

如果用户说window,如何停止No关闭?
或者我怎样才能达到相同的最终结果?

2 个答案:

答案 0 :(得分:2)

正如@david所说,IWorkbenchListener有一个preShutDown事件,允许通过返回false来否决整个工作台的关闭。

关闭最后一个工作台窗口或通过 File>等操作关闭工作台退出

如果您希望阻止关闭单个IWorkbenchWindow,则需要将 close 侦听器添加到代表工作台窗口的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标志设置为false将阻止关闭/丢弃shell。

答案 1 :(得分:1)

警告:我只给了这种技术一个最小的测试,它似乎按预期工作。

IWorkBenchWindow获取IWorkbench对象。

IWorkbenchListener添加到工作台对象。

侦听器有一个preShutdown方法,可以让你否决结束。