我有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方法,该方法将关闭向导。
希望这可以帮助。