noe Geschrieben 7. Juni 2009 Geschrieben 7. Juni 2009 Hallo! Ich arbeite zur Zeit mit Jung und hab eine Klasse die von SparseGraph erben soll. Wenn diese Klasse aber dann benutzt wird, kommt eine Class Not Found Exception. Woran könnte das liegen? Dieser Fehler kommt übrigens ausschließlich wenn ich von Klassen aus einem bestimmten package (jung.graph.impl) erben will. Zitieren
perdian Geschrieben 7. Juni 2009 Geschrieben 7. Juni 2009 Woran könnte das liegen?Wie der Name der Fehlermeldung (und die dazugehörige Javadoc) schon sagt: Es konnte eine benötigte Klasse nicht gefunden werden. Zitieren
Pinhead Geschrieben 8. Juni 2009 Geschrieben 8. Juni 2009 Vermutlich befindet sich das jar Archiv in dem die Klassen aus dem package jung.graph.impl liegen nicht im Klassenpfad. Zitieren
noe Geschrieben 8. Juni 2009 Autor Geschrieben 8. Juni 2009 "Vermutlich befindet sich das jar Archiv in dem die Klassen aus dem package jung.graph.impl liegen nicht im Klassenpfad." Doch, natürlich liegt das Jar-Archiv bereits im Klassenpfad (ich habs um die 10 Mal hinzugefügt!): wenn ich von einer Klasse erbe, die aus einem anderen package stammt, z.B. "SparseVertex.java" dann funktioniert es. Ausserdem würde es doch auch zu Kompilierfehler kommen, wenn er die Klasse nicht findet, was ja nicht der Fall ist. Zitieren
kingofbrain Geschrieben 8. Juni 2009 Geschrieben 8. Juni 2009 Du musst zwischen Entwicklungs- und Laufzeitumgebung unterscheiden. Es kann schon sein, dass die Klasse zum Entwicklungszeitpunkt gefunden wird, weil Du sie z.B. in Eclipse in den Build Path mit aufgenommen hast. Wenn Du dann aber zur Laufzeit die Klasse nicht im Klassenpfad hast, dann erhältst Du eben die von Dir genannte Exception. In welcher Umgebung tritt das Problem denn auf? Application Server? Standalone Anwendung? Und wie fügst Du die benötigte Klasse / das JAR dort zum Classpath hinzu? Peter Zitieren
perdian Geschrieben 8. Juni 2009 Geschrieben 8. Juni 2009 Doch, natürlich liegt das Jar-Archiv bereits im KlassenpfadNö, liegt es nicht. Läge es im Classpath würde die entsprechende Fehlermeldung nicht erscheinen. Von daher gibt's nur die Alternative: Classpath (doch) nicht richtig konfiguriert. Schonmal einen Debugger angeworfen und dir den Classloader angesehen, der versucht die entsprechende Klasse zu laden? Wenn nein: machen! Zitieren
noe Geschrieben 8. Juni 2009 Autor Geschrieben 8. Juni 2009 "In welcher Umgebung tritt das Problem denn auf?" Standalone Anwendung "Und wie fügst Du die benötigte Klasse / das JAR dort zum Classpath hinzu?" Eclipse: rechter Mausklick auf das Projekt --> Build path --> add external archives. Das Jar-Archiv: jung-1.7.6.jar, enthält u.a. das package jung.graph.impl & das package jung.graph. Die Klasse die nicht gefunden wird ist von mir geschrieben und heißt Molecule, sie soll von SparseGraph erben, eine Klasse aus dem package jung.graph.impl. Wenn ich sie aber stattdessen von SparseVertex erben lasse, eine Klasse innerhalb jung.graph, tritt der Fehler nicht auf, was heißt dass er dieses Unterpackage aus irgendeinem Grund nicht findet. Zitieren
kingofbrain Geschrieben 8. Juni 2009 Geschrieben 8. Juni 2009 Wo liegt denn Deine geschriebene Klasse? In einem Ordner, der von Eclipse als Source-Folder mit in den Classpath einbezogen wird? Poste doch mal den exakten Stacktrace Deines Fehlers. Hast Du perdians Tipp schon befolgt und mal reindebugged? Peter Zitieren
noe Geschrieben 8. Juni 2009 Autor Geschrieben 8. Juni 2009 "Hast Du perdians Tipp schon befolgt und mal reindebugged? " ja, hatte ich schon gemacht: ClassNotFoundException(Throwable).<init>(String, Throwable) line: 217 ClassNotFoundException(Exception).<init>(String, Throwable) line: not available ClassNotFoundException.<init>(String) line: not available ClassLoader.findBootstrapClass(String) line: not available [native method] Launcher$ExtClassLoader(ClassLoader).findBootstrapClass0(String) line: not available Launcher$ExtClassLoader(ClassLoader).loadClass(String, boolean) line: not available Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: not available Launcher$AppClassLoader.loadClass(String, boolean) line: not available Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available Launcher$AppClassLoader(ClassLoader).loadClassInternal(String) line: not available CovalentBond.bind() line: 28 "Wo liegt denn Deine geschriebene Klasse?" Die liegt im selben Projekt wo auch die mainMethode liegt. Stacktrace: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/Predicate at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) 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) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) 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) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at molecules.atoms.CovalentBond.bind(CovalentBond.java:28) at molecules.atoms.Atom.covalentBond(Atom.java:36) at test.MoleculeVisu.main(MoleculeVisu.java:21) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.Predicate 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) at java.lang.ClassLoader.loadClassInternal(Unknown Source) ... 27 more Zitieren
Schiller256 Geschrieben 8. Juni 2009 Geschrieben 8. Juni 2009 Wie startest du deine Standalone Anwendung denn? Startest du sie aus eclipse heraus oder aus der Kommandozeile? Denn laut Stacktrace werden Klassen vom apache Commons Projekt nicht gefunden. Solltest du aus eclispe heraus deine Standalone Anwendung starten dann schau dir mal mit "Run -> Run..." deine Launch Configuration an. Da gibt es einen Tab Classpath und hier sollten deine externen jars auch aufgeführt sein. Zitieren
kingofbrain Geschrieben 9. Juni 2009 Geschrieben 9. Juni 2009 Um den Post von Schiller (hoffentlich) noch klärend zu ergänzen: Deine Anwendung mault nicht wegen irgendeiner Deiner Klassen, sondern wegen einer fehlenden apache-commons Klasse. Die Bibliothek, die Du verwendest, benötigt also zur Laufzeit apache-commons. Deshalb kannst Du auch ohne Probleme kompilieren, weil die Abhängigkeit von der Bibliothek ja bei deren Kompilierung aufgelöst wurde. Schau mal nach, was die von Dir verwendete Bibliothek noch alles an Abhängigkeiten hat, da könnte noch mehr sein. Peter Zitieren
noe Geschrieben 9. Juni 2009 Autor Geschrieben 9. Juni 2009 Super, danke, hat geklappt! Hab appache runtergeladen & importiert, einpaar andere Sachen haben auch gefehlt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.