4

WizardDialog/Wizard があり、コンテンツは WizardPage です。ページ内で何かをしていて、エラーが発生したときに MessageBox がポップアップし、[OK] をクリックした後、wizardDialog を強制的に閉じたいとしましょう。

悪い方法は、次のように呼び出すことです:

getShell().dispose;

SWT が例外をスローするため:

!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例外なしでウィザードを強制的に閉じる方法は?

4

5 に答える 5

4

ウィザード ダイアログ オブジェクトで「close」メソッドを使用する必要があります。ウィザード ページから呼び出すには、コールバック インターフェイスを作成してページに渡すことをお勧めします。そんな感じ:

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 メソッドを呼び出すだけです。

お役に立てれば。

于 2013-08-20T14:53:25.900 に答える
0

私の場合、機能した唯一のオプションは次のとおりです。

getShell().setVisible(false);
于 2015-08-14T12:27:59.560 に答える
0

cancelPressed()ウィザード ダイアログを閉じるには、WizardDialog のメソッドを使用すると思います

BaseWizard baseWizard=new BaseWizard();
BaseWizardDialog baseWizardDialog=new BaseWizardDialog(getShell(),baseWizard);
baseWizard.setBaseWizardDialog(baseWizardDialog);
baseWizardDialog.open();




public class BaseWizard extends Wizard  {
private BaseWizardDialog baseWizardDialog=null;
private BaseWizardPage baseWizardPage;
public BaseWizard()
    {
    super();
    setWindowTitle("My Wizard");
        baseWizardPage=new BaseWizardPage();

    }
public void setBaseWizardDialog(BaseWizardDialog baseWizardDialog) {
        this.baseWizardDialog = baseWizardDialog;
        baseWizardPage.setBaseWizardDialog(this.baseWizardDialog);
    }

    public BaseWizardDialog getBaseWizardDialog() {
        return baseWizardDialog;
    }
}

public class BaseWizardPage extends WizardPage {

public void createControl(Composite parent) {
private BaseWizardDialog baseWizardDialog=null;
public void setBaseWizardDialog(BaseWizardDialog baseWizardDialog) {
        this.baseWizardDialog = baseWizardDialog;
    }

    public BaseWizardDialog getBaseWizardDialog() {
        return baseWizardDialog;
    }

最初のコントロールを作成し、ダイアログを閉じたいときは、キャンセルを押して書くだけです

if(ConditiontoClose==true)
getBaseWizardDialog().cancelPressed();

}

}
于 2014-01-29T11:53:08.423 に答える
0

これは私にとってはうまくいきました。

 // fatal error situation detected on a wizard page
 MessageDialog.openError(getShell(), "Error", "Wizard cannot continue and will now exit.");
 getWizard().getContainer().getShell().close();
于 2016-02-01T08:10:36.197 に答える