2017-10-05 4 views
0

Ich habe eine Wizard, die eine page haben. In den performFinish Methoden der Wizard-Klasse möchte ich den Assistenten schließen und einige Dialoge eines anderen Plugins ausführen.Schließen Assistenten und Ausführen von Dialogen

Wenn ich den folgenden Code schreibe, ist es nicht geschlossen, es ist nur nicht sichtbar.

getShell().setVisible(false); 

Als ich wite getShell().close() oder dialog.close() oder wizard.dispose() die Dialoge nicht erschienen. Was soll ich machen?

Die Dialoge werden in einem anderen Plugin mit einem solchen unteren Code geöffnet.

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

Können Sie ein minimales nachprüfbares Beispiel veröffentlichen? In diesem Code kann ich nicht die Absicht sehen, über die Sie in Ihrer Frage schreiben. –

+1

in 'performFinish' müssen Sie nur wahr und nichts mehr zurückgeben – XtremeBaumer

Antwort

0

Wenn Sie Ihren Assistenten schließen möchten, bevor der neue Dialog öffnet müssen Sie arrangieren für den Dialog asynchron auszuführen. Sie können dies mit Display.asyncExec tun. Etwas wie:

@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; 
} 

(das ist Java 8, wenn Sie eine frühere Java verwenden verwenden, um ein Runnable).

Der Code im Block asyncExec wird erst ausgeführt, nachdem der Assistent geschlossen wurde.

Verwandte Themen