# immer noch Probleme bei PlugIn-Integrierung



## dzim (19. Jan 2009)

Hallo zusammen und ein gesundes neues Jahr (auch wenn das jetzt recht verspätet kommt)!

Ich sitze zwar immer noch die ganze Zeit am Proggn von RCP-Zeug, konnte mich aber mehr oder weniger auf die Basics beschränken (Editoren, jede Menge Views, Jobs, Dialoge, Wizards, ...)
Leider habe ich ein Grundproblem noch immer nicht ändern können: Das Laden von eigenen PlugIns...

(Bitte nicht allzu sehr meckern, wenn es Grütze ist...)
Ich hab schon vor längerer Zeit eine Extension Point angelegt, in der als ein Attribut einmal die entsprechende Bundle-Id liegt (damit starte ich das Bundle direkt - Plattform.getBundle(id).start() - und danach lade ich mit 

String model2loadString = e.getAttribute(class);
Class<TaskModel> loadClass = bundle2load.loadClass(model2loadString);
TaskModel model2load = loadClass.newInstance();

die Klasse die ich laden will (ich weiß nicht, ob das auch über Object o = e.createExecutableExtension(class); machen könnte).

Danach würde ich, weil das TaskModel IAdapable oder besser PlattformObject erweitert, es an mein bestehendes Model, welches im CommonNavigator angezeigt wird, anhängen.

Problem: Klappt nicht.
Es kommt auch gern mal der Fehler


```
!ENTRY org.eclipse.osgi 4 0 2009-01-19 16:54:02.499
!MESSAGE Application error
!STACK 1
org.eclipse.swt.SWTError: Not implemented [multiple displays]
        at org.eclipse.swt.SWT.error(SWT.java:3803)
        at org.eclipse.swt.widgets.Display.checkDisplay(Display.java:712)
        at org.eclipse.swt.widgets.Display.create(Display.java:842)
        at org.eclipse.swt.graphics.Device.<init>(Device.java:154)
        at org.eclipse.swt.widgets.Display.<init>(Display.java:471)
        at org.eclipse.swt.widgets.Display.<init>(Display.java:462)
        at org.eclipse.ui.internal.Workbench.createDisplay(Workbench.java:525)
        at org.eclipse.ui.PlatformUI.createDisplay(PlatformUI.java:161)
        at myApp.rcp.pfs.PFSApplication.start(PFSApplication.java:18)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:386)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1212)
```

Ok, ich hab ja der einfachheit halber erst alles in der hauptanwendung geschrieben, weil es mit dem PlugIn nicht geklappt hat... vielleicht liegt es an der doppelten benennung - wobei die Editoren ja dann schon andere IDs haben als vorher...
Ich weiß es nicht...

Wenn jemand konstruktive vorschläge hat, ich wär dafür offen - es drängt nicht, wär aber schön es mal irgendwann gebacken zu bekommen.

Danke euch allen schon mal.

PS: Vielleicht gibt es ja eine Variante den CommonNavigator beim start des PlugIns (also im Activator) zu überzeugen, die Daten anzuhängen, aber dafür verstehe ich das CNF wahrscheinlich zu wenig


----------



## Wildcard (19. Jan 2009)

Du brauchst keine Bundles zu starten. Die werden ja nach Bundle-Activation Policy automatisch gestartet. Überlicherweise wird ein Bundle immer dann gestartet, wenn eine seiner Klassen angefragt wird.
Verstehe ich das richtig? Du hast einen Extension Point definiert und dort klinkt sich dein anderes PlugIn ein und du hast dort zB ein Feld vom Typ Java Class die du gerne instanzieren möchtest?
IConfigurationElement#createExecutableExtension war schon richtig, so wird's gemacht.
http://help.eclipse.org/ganymede/topic/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime/IConfigurationElement.html#createExecutableExtension(java.lang.String)


----------



## dzim (20. Jan 2009)

YEAH! That's it my friend!

Alter danke für den letzten Zündenden Gedanken!
Das "per Hand" starten - bzw. der Versuch es zu tun, hat in Kombination immer die Probleme gebracht - ich habe den Start des Bundles entfernt, bei dem IConfigurationElement#createExecutableExtension Teil die Kommentare entfernt und schon ging es!
Ich werde jetzt meinen ExtensionPoint aufräumen und die bundle-id wieder wegnehmen, da ich sie nicht brauch und es die ganze sache eher unsauber macht.

Vielen Dank noch einmal - so was tolles am frühen morgen (ich weiß - ich bin leicht zu begeistern...)


----------

