Training „git“
07.10.2010 - 08.10.2010, Essen
Training „Eclipse RCP“
28.03.2011 - 01.04.2011, Dortmund
Eclipse RCP

Aufbau einer RCP-Anwendung

Applikationen

Das Plug-in org.eclipse.core.runtime stellt die Laufzeit-Infrastruktur für Eclipse-Anwendungen bereit. Der Eintrittspunkt in eine RCP-Applikation ist die Applikationsklasse, die über den Extension Point org.eclipse.core.runtime.applications registriert wird:

<extension id="someapp" point="org.eclipse.core.runtime.applications">
   <application>
      <run class="com.example.SomeRcpApplication"/>
   </application>
</extension>

Die Applikationsklasse muss das Interface IApplication implementieren und ist für den Start und das Beenden der Applikation zuständig:

public interface IApplication {
    public Object start(IApplicationContext context) throws Exception;
    public void stop();
}

Das Plug-in org.eclipse.ui stellt mit der Eclipse Workbench den grafischen Rahmen für Eclipse RCP-Anwendungen bereit. Eclipse-RCP Anwendungen lösen daher in Ihrer start-Methode den Start der Workbench aus. Dieser wird von einer sog. Advisor-Klasse begleitet, die die Workbench gemäß den Wünschen der Applikation konfiguriert. Die Initialisierung der Workbench erfolgt in der Applikationsklasse mit folgendem Code:

public class SomeRcpApplication implements IApplication {

    public Object start(IApplicationContext context) throws Exception {
        Display display = PlatformUI.createDisplay();
        try {
            // WorkbenchAdvisor zur Konfiguration der Workbench erstellen
            WorkbenchAdvisor advisor = new ApplicationWorkbenchAdvisor();
            // Eclipse Workbench starten
            // createAndRunWorkbench blockiert bis zum Beenden der Workbench
            int returnCode = PlatformUI.createAndRunWorkbench(display, advisor);
            // Workbench kann einen Neustart der Anwendung verlangen
            if (returnCode == PlatformUI.RETURN_RESTART)
                return IApplication.EXIT_RESTART;
            else
                return IApplication.EXIT_OK;
        } finally {
            display.dispose();
        }
    }
}

Zum Start der Applikation wird eine spezielle Startkonfiguration Eclipse Application verwendet. In der Startkonfiguration werden analog zum Start eines OSGi-Containers die zu startenden Plug-ins angegeben und die zu startende Applikation ausgewählt:

Laufzeit-Optionen

Beim Start der Anwendung können Sie unter Arguments > Program arguments Laufzeitoptionen für die Eclipse-Anwendung angeben. Standardmäßig wird immer die Plattform und Sprache der Testumgebung über Umgebungsvariablen definiert:

-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}

Praktisch ist vor allem die Option:

-consoleLog

Damit bewirken Sie, dass alle Meldungen und Exceptions der Eclipse-Anwendung auch auf der System-Konsole ausgegeben werden.

Eine vollständige Aufzählung aller Laufzeit-Optionen finden Sie in der Eclipse-Hilfe unter Platform Plug-in Developer Guide > Reference > Other reference information > Runtime options.

Fehlersuche, Log-Datei der Eclipse-Anwendung

Alle Meldungen der Eclipse-Komponenten werden in einer Logdatei der Anwendung abgelegt. Neben der Ausgabe auf der Systemkonsole erreichen Sie sie in der IDE über Window > Show View > Error Log. Standardmäßig werden die Meldungen der IDE-Anwendung angezeigt - Sie können jedoch zum Error Log Ihrer Anwendung wechseln:

Peter, 08. Oktober, 08:50 Uhr

Das versteh ich nicht:

} finally {
// Dispose SWT display after application was quit
display.dispose();
}

In start(IApplicationContext context)
wird doch nix gestoppt, oder?

Ralf Ebert, 08. Oktober, 11:41 Uhr

Danke für den Hinweis, habe das Code-Beispiel noch etwas ausführlicher kommentiert. Der createAndRunWorkbench-Aufruf blockiert bis zum Beenden der Anwendung, daher auch das Handling der Resourcenfreigabe. Die stop()-Methode in der Applikationsklasse dient zum erzwungenen Beenden der Anwendung und wird bei einem regulären Beenden auch nicht aufgerufen.

Michael Beerens, 17. Dezember, 14:12 Uhr

int returnCode = PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
... müsste doch ...
int returnCode = PlatformUI.createAndRunWorkbench(display, advisor);
... heißen, da das WorkbenchAdvisor-Objekt unter dem Namen "advisor" angelegt wurde????

Danke und Gruß
Michael

Martin, 25. Januar, 12:42 Uhr

Wo finde ich das Interface IApplication und die Klasse, welche IApplication implementiert im Beispiel?

P.S.: Super Tutorial, macht Spass

Michael, 09. März, 13:52 Uhr

Hallo Ralf, ich hab die Frage, ob man mit RCP ein Plugin für eclipse erstellen kann. Also das ich dieses in eclipse nutzen kann. Oder kann man mit RCP nur eigenständige Applikationen erstellen.
Gruß Michael

Ralf Ebert, 10. März, 15:07 Uhr

Michael: Im Grunde ist Eclipse RCP eine Teilmenge von der Eclipse IDE, die Entwicklung von Plug-ins basiert auf den genau gleichen Mechanismen.

Über Ihre Kommentare und Hinweise freue ich mich sehr:
Ralf Ebert | Eclipse RCP Buch | Aufbau einer RCP-Anwendung