org.eclipse.ui.dialogs.ListSelectionDialog erzeugt ClassNotFoundException zur Laufzeit

Eclipser

Mitglied
Hallo liebe Java-Freunde,
vorab erstmal ein dickes Lob: dieses Forum ist eine wahre Fundgrube für den hilflosen Entwickler. Wirklich klasse.

Leider hab ich zu meinem akutellen Problem auch nach einer Woche verzweifeltem Googeln nichts gefunden, das mir weiterhilft. Daher wende ich mich nun verschämt direkt an euch.

Ich entwickle derzeit in eclipse 3.7 eine Anwendung, die SWT und JFace verwendet. Ich möchte dabei unter Anderem einen ListSelectionDialog öffnen. Leider bekomme ich schon beim Initialisieren folgende Stacktrace-Meldung (inkl. Programmabbruch):

Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.IStatus
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 6 more

Als ich noch eclipse 3.6 nutzte, kam immer die Meldung, dass org.eclipse.core.runtime.IRegistryChangeListener nicht gefunden werden könne. Ich hab dann nachgesehen und tatsächlich feststellen müssen, dass beide erwähnten Klassen nicht in den Jar enthalten sind. In der eclipse-Hilfe werden sie jedoch gelistet.

Daraufhin hab ich nach downloadbaren Implementierungen gesucht, diese auch gefunden (siehe beispielsweise hier) und eingebunden. Allerdings bekam ich dann immer die SecurityException, dass die "Signer information" der Klassen nicht mit denen der Klassen aus dem org.eclipse.core.runtime-Paket übereinstimmen.

Wisst ihr Rat? So allmählich bin ich mit meiner Phantasie am Ende...
Vielen Dank schonmal,
Eclipser
 
Zuletzt bearbeitet:
Anders als der Stacktrace vermuten lässt liegt die Klasse auch nicht in org.eclipse.core.runtime sondern in org.eclipse.equinox.common (sie ist vor einiger Zeit verschoben worden und hat aus Kompatibilitätsgründen den Package Namen behalten).
Stell sicher das equinox.common in deiner Launch Config vorhanden ist.
Mich wundert eher das dein Bundle überhaupt gestartet wurde. Du hast nicht etwa händisch am Build Path rumgeschraubt, oder?


Daraufhin hab ich nach downloadbaren Implementierungen gesucht, diese auch gefunden (siehe beispielsweise hier) und eingebunden. Allerdings bekam ich dann immer die SecurityException, dass die "Signer information" der Klassen nicht mit denen der Klassen aus dem org.eclipse.core.runtime-Paket übereinstimmen.
Das solltest du besser nicht tun.

EDIT: oder handelt es sich gar nicht um ein plugin Projekt?
 
Hi,
es handelt sich um nicht um ein Plugin-Projekt, sondern um ein normales Programm mit JFace-Elementen in der Oberfläche.
Der Hinweis hat funktioniert, jetzt vermisst er wieder die IRegistryChangeListener. Danke 🙂
Aber die findet man scheinbar in der org.eclipse.equinox.Registry. Sagt die Java-Suche. Auf die Idee, die dafür einzusetzen, bin ich leider gerade eben erst gekommen. Jetzt weiß ich auch, wofür die gut ist 🙂

Viele Grüße,
Eclipser
 
Ich verwende dafür einfach den Open Type Dialog (CTRL + Shift + T). In der Fußzeile steht in welchem Bundle die Klasse zu finden ist.
Übrigens, auch für ein non-osgi Projekt macht es im Eclipse Kontext IMO Sinn es trotzdem als Plugin Projekt zu entwickeln, denn dann kümmert sich Eclipse um den Classpath. Du musst deine Abhängigkeiten nur im Manifest eintragen.
 

Neue Themen


Zurück
Oben