NoClassDefFoundError

Status
Nicht offen für weitere Antworten.

caty

Mitglied
Hallo Leute!

Ich habe gerade folgendes Problem und komme absolut nicht weiter. Ich versuche meine Gui aus einer Jar-Datei zu starten. Dabei schmeißt er mir diese Fehlermeldung raus:
Code:
java.lang.NoClassDefError: javax/jms/JMSException

Mein Programm greift auf externe Jar-Bibliotheken zu, das ist wahrscheinlich auch das Problem, dass er bestimmte Klassen nicht findet. Ich habe bereits recherchiert und mir ein paar Tipps geholt. Es kann sein, dass ich die Umgebungsvariable CLASSPATH falsch gesetzt habe. Deswegen habe ich auch damit schon etwas experimentiert, es kommt aber immer die gleiche Fehlermeldung :-(

Aktuell ist mein CLASSPATH auf diesen Pfad gesetzt:
C:\demsps98\views\symphonia_sfw_sy20_pdb_snap_demsps98\myTools\ActiveMQ\4.0.2\lib

Im Order lib befindet sich ein jar-Packet, in dem sich die Klasse JMSException befindet.

Ich hoffe jemand kennt sich damit aus und kann mir dabei helfen!
 
G

Gast

Gast
Je nachdem wie du den Classpath setzt (zb mittels String?) musst du vor jedem Backslash noch einen weiteren Backslash machen.

C:\\demsps98\\views\\symphonia_...

Vlt liegt es daran?
 

caty

Mitglied
Ich habe den Classpath über Arbeitsplatz -> Eigenschaften -> Erweitert -> usw. gesetzt. Und dort sind eigentlich alle Pfade mit einfachem "\" angegeben.

Kann es noch einen anderen Grund geben?
 
M

Michael...

Gast
Hallo,

ich bin mir nicht sicher, aber externe Bibliotheken müssen m.W. explizit im CLASSPATH gelistet werden.

Mit:
C:\demsps98\views\symphonia_sfw_sy20_pdb_snap_demsps98\myTools\ActiveMQ\4.0.2\lib
ist nur der Zugriff auf Klassen möglich, die "lose" in dem Verzeichnis liegen.

Mit:
C:\demsps98\views\symphonia_sfw_sy20_pdb_snap_demsps98\myTools\ActiveMQ\4.0.2\lib\meinPackage.jar
ist der Zugriff auf Klassen innerhalb des Packages möglich
 

caty

Mitglied
Nach dem Verändern des Pfades im Classpath sieht es so aus:

C:\...\lib\geronimo-jms_1.1_spec-1.0.jar

Das ist das Jar-Paket wo sich auch die Klasse JMSException befindet. Allerdings gibt er mir immer noch dieselbe Fehlermeldung aus :(
 
G

Gast2

Gast
du musst die jar datei in deinem projekt mit einbinden... mit was arbeitest du eclipse????
Ich weiß nict warum den claspath in den umgebungsvariablen gesetzt hast du musst den deines projektes setzen
 

caty

Mitglied
Wie meinst du das genau mit dem classpath meines projektes???
Ich arbeite zur Zeit mit Eclipse.
Habe gerade versucht die Jar-Datei mit ins Projekt zu nehmen, also mit Import -> Jar-File -> usw. Und dann habe ich wieder eine Jar-Datei meines kompletten Projektes erzeugt. Die Jar-Datei mit den Libraries wird leider trotzdem nicht erkannt :( Das muss doch irgendwie möglich sein, bin schon total am verzweifeln.
 

Lex

Mitglied
Wenn du das Projekt aus der Konsole aufrufts gib deine jar-Datei, die du als Bibliothek benutzt, mit der -cp Option an.

Code:
java -cp lib.jar:meinprojekt.jar de.test.Class1

In dem Beispiel enthält lib.jar die verwendete Klasse, meinprojekt.jar ist dein eigens Programm und de.test.Class1 ist deine Main-Klasse mit der Angabe in welchem Packet sie liegt.

MfG
Lex
 
G

Guest

Gast
schau mal in die FAQ da steht wie du eine jar-Datei machst. du ein manifest usw. schreiben....
Findet er die Klasse wenn du dein Programm aus Eclispe startest???
 

caty

Mitglied
Danke erstmal für die Tipps!
java -cp lib.jar:meinprojekt.jar de.test.Class1

In dem Beispiel enthält lib.jar die verwendete Klasse, meinprojekt.jar ist dein eigens Programm und de.test.Class1 ist deine Main-Klasse mit der Angabe in welchem Packet sie liegt.

Ich habe Lex's Beispiel gefolgt und mein Programm mit dem Befehl ausgeführt:
Code:
java -cp K:\...\...\....jar Event-Monitor.jar gui.MainFrame
Dabei ist Event-Monitor.jar mein Programm, das ich auszuführen versuche. gui.MainFrame ist die Klasse, die gestartet werden soll. Diesemal findet er die Klasse MainFrame nicht, obwohl ich das so eingetippt habe, wie das in der Hierarchie aufgebaut ist. Im Jar-Paket gibts tatsächlich einen Ordner gui und dort die Klasse MainFrame. Diese Fehlermeldung kommt dabei raus:
Code:
java.lang.NoClassDefFoundError: Event-Monitor\jar
Muss man die Jar-Libraries dann immer angeben, wenn man das Programm startet? Ich wollte später das Programm mit Doppelklick auf das Jar-Paket starten.

Findet er die Klasse wenn du dein Programm aus Eclispe startest???
Er findet die Klasse, wenn ich das aus Eclipse starte, weil ich die Libraries in mein Projekt eingebunden habe. D.h. nicht importiert, sie referenzieren nur zu der Stelle, wo die Libraries wirklich zu finden sind. Wenn ich allerdings ein Jar-Datei aus meinem Projekt mit Eclipse erzeuge, nimmt er die Libraries nicht mit und auch die Referenzen nicht.

Gibt es irgendeine Möglichkeit trotzdem auf die Libraries zu verweisen?
 

Lex

Mitglied
Hinter die -cp Option musst du alle Bibliotheken (jars) hängen die du verwendest. Diese müssen unter Windows durch ein ; getrennt werden.

Code:
java -cp lib1.jar;lib2.jar;lib3.jar .....

MfG
Lex
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben