java - 有没有办法阻止 IWorkbenchWindow 关闭?

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

所以我有我的 IWorkbenchWiiondow 对象,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
    }
});

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

最佳答案

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

当最后一个工作台窗口关闭或通过“文件 > 退出”等操作关闭工作台。

如果您想阻止单个 IWorkbenchWindow 关闭,则需要向表示工作台窗口的 shell 添加一个close 监听器。

例如:

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 被关闭/处置。

关于java - 有没有办法阻止 IWorkbenchWindow 关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32054382/

相关文章:

java - 如何在Java中打印堆栈

java - IWizardPage 的动态内容未正确显示

java - 在包内创建java文件

java - 复合setLayout对齐

java - 我需要通过jdt插件中的eclipse Imarker找出代码中错误的位置

java - isLabelProperty() 未被调用

python - Pydev 没有字符串参数的悬停文本

java - 如何在 Eclipse RCP 中使用 plugin_customization.ini 使 org.eclipse.equinox.p2.ui.sdk.scheduler/enabled 为真?

java - Hibernate:修改条件 sqlrestriction 以使用大于或等于日期

Java-继承实现