2016-06-09 18 views
0

Ich versuche, den Standard-P2-Installationsassistenten zu öffnen, wenn auf eine Schaltfläche in meiner e4-RCP-Anwendung geklickt wird.Wie öffne ich den Standard-P2-Installationsassistenten von einer e4 RCP-Anwendung?

Ich rufe ProvisioningUI.getDefaultUI().openInstallWizard in meinem Click-Handler, um den Assistenten zu öffnen.

Klick auf diese Schaltfläche wirft:

java.lang.IllegalStateException: Workbench has not been created yet. 
    at org.eclipse.ui.PlatformUI.getWorkbench(PlatformUI.java:93) 
    at org.eclipse.equinox.internal.p2.ui.ProvUI.getDefaultParentShell(ProvUI.java:155) 
    ... 

Die Stacktrace zeigt, dass p2 versucht PlatformUI.getWorkbench zu nennen, aber soweit ich das weiß, ist nicht in e4-Anwendungen unterstützt, Dependency Injection verwendet werden muss.

Wie öffnen Sie den Standard-P2-Installationsassistenten aus einer e4 RCP-Anwendung?

Vielen Dank im Voraus.

Antwort

1

Da die P2-Benutzeroberfläche vom Eclipse 3.x-Kompatibilitätsmoduscode wie PlatformUI.getWorkbench abhängig ist, kann sie in einer reinen e4-Anwendung nicht verwendet werden.

Sie können die Nicht-UI-P2-Operationen verwenden, da sie den Kompatibilitätsmoduscode nicht benötigen.

+0

Vielen Dank, aber wie Sie diesen Kompatibilitätsmodus in diesem Fall verwenden? Ich habe zu diesem Thema mindestens vier verschiedene Tutorials gefunden, die völlig unterschiedliche Ansätze enthalten. – wtfzn

+1

Wenn Sie den Code für den Kompatibilitätsmodus verwenden möchten, schreiben Sie einen traditionellen 3.x-RCP und keinen e4-RCP. Es gibt einige Leute, die behaupten, eine "hybride" App zu haben, um zu arbeiten, aber es ist schwierig, und ich kann nicht darauf hinweisen. –

+0

Also ist es nicht möglich, meine e4-Anwendung zu schreiben und ein 3.x-Plugin wie .... p2.ui in dieses Plugin einzuschließen? – wtfzn

0

Betrachtet man den Hilfe/Install new software ... Menü Beitrag, so scheint es mit dem Befehl org.eclipse.equinox.p2.ui.sdk.install zur Verfügung gestellt werden. Könnten Sie es einfach zu Ihrer Benutzerschnittstelle hinzufügen oder trigger it programmatically wie im Eclipse Wiki beschrieben?

Ich bin nicht sicher, ob das funktioniert oder die Kompatibilitätsebene erwartet, aber es ist einen Versuch wert.