2017-10-05 6 views
0

Wizardにはpageが1つあります。ウィザードのクラスのperformFinishメゾスでは、ウィザードを閉じて別のプラグインのダイアログをいくつか実行したいと思います。ウィザードを閉じてダイアログを実行

私は以下のコードを書くとき、それは閉じていない、それは目に見えないだけです。

getShell().setVisible(false); 

私は登場しないgetShell().close()またはdialog.close()またはwizard.dispose()ダイアログをWITE。私は何をすべきか?

ダイアログは次のようなコードで別のプラグインで開かれます。

IWorkbench wb = PlatformUI.getWorkbench(); 
IWorkbenchWindow win =wb.getActiveWorkbenchWindow(); 
CreateDialog UD = new CreateDialog(win.getShell()); 
UD.open(); 
+0

最小限の検証可能な例を投稿できますか?このコードでは、あなたの質問にあなたが書いている意図を見ることができません。 'performFinish'の –

+1

では、真となるだけを返す必要があります。 – XtremeBaumer

答えて

0

新しいダイアログが開く前にウィザードを閉じるには、ダイアログを非同期で実行する必要があります。 Display.asyncExecを使用してこれを行うことができます。ような何か:

@Override 
public boolean performFinish() 
{ 
    ... other work ... 

    Display.getCurrent().asyncExec(() -> 
    { 
     IWorkbench wb = PlatformUI.getWorkbench(); 
     IWorkbenchWindow win =wb.getActiveWorkbenchWindow(); 
     CreateDialog UD = new CreateDialog(win.getShell()); 
     UD.open(); 
    }); 

    return true; 
} 

は、(以前のJavaを使用している場合、これは、Javaの8 Runnableを使用します)。

asyncExecブロックのコードは、ウィザードが終了するまで実行されません。

関連する問題