2017-10-05 74 views
0

我有一個Wizard有一個page。在嚮導類的performFinish方法中,我想關閉嚮導並運行另一個插件的一些對話框。關閉嚮導和運行對話框

當我寫下面的代碼時,它沒有關閉,它只是不可見。

getShell().setVisible(false); 

當我WITE getShell().close()dialog.close()wizard.dispose()沒有出現對話框。我該怎麼辦?

對話框在另一個插件中以下面的代碼打開。

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

你能發佈一個最小可驗證的例子嗎?在這段代碼中,我無法看到你在你的問題中寫的意圖。 'performFinish'中的 –

+1

您只需返回true, – 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 8,如果您使用的是早期的Java使用Runnable)。

在嚮導關閉後,asyncExec塊中的代碼纔會運行。