我有WizardDialog / Wizard,内容是WizardPage。可以说我在Page内做某事,当发生错误时,我会弹出MessageBox,然后单击“确定”后我要强制关闭WizardDialog。

坏方法是致电:

getShell().dispose;

因为SWT引发和Exception:
!ENTRY org.eclipse.ui 4 0 2013-08-20 14:15:13.353
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTException: Widget is disposed

相反,当我打电话时:
getWizard().performCancel();

它什么也没做。

如何在没有SWT异常的情况下强制关闭向导?

最佳答案

您应该在向导对话框对象上使用“关闭”方法。要从向导页面调用它,建议您创建一个回调接口并将其传递给页面。像这样:

final YourWizard wizard = new YourWizard ();
WizardDialog wizardDialog = new WizardDialog(shell, wizard);

wizard.setErrorhandler(new YourCustomErrorHandlerInterface() {

        @Override
        public void onError() {
            wizardDialog.close();
        }
});
wizardDialog .open();

之后,在创建向导页面时,将YourCustomErrorHandlerInterface传递给它。当发生错误时,只需调用YourCustomErrorHandlerInterface#onError方法,该方法将关闭向导。

希望这可以帮助。

08-18 18:55