有没有办法阻止 IWorkbenchWindow 关闭?

Is there a way to prevent an IWorkbenchWindow from closing?

所以我有我的 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,我如何阻止 window 关闭?
或者我怎样才能达到相同的最终结果?

警告:我只对这项技术进行了最低限度的测试,它似乎按预期工作。

IWorkBenchWindow 获取一个 IWorkbench 对象。

IWorkbenchListener 添加到 workbench 对象。

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

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

当最后一个 workbench window 关闭时或通过 File > Exit.[= 等操作关闭 workbench 16=]

如果你想阻止单个 IWorkbenchWindow 被关闭,你需要添加一个 close 监听器到代表 workbench window.

例如:

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 成为 closed/disposed。