java.lang.NoClassDefFoundError - Fehlkonfiguration der JVM

tsserver

Cadet 3rd Year
Registriert
Juli 2009
Beiträge
35
Hallo zusammen

Wenn ich auf dem Netbook eines Kollegen eine (selber geschriebene) Jar-Datei mit "Java (TM) Platform SE Binary" ausführen will, erscheint für ein paar Millisekunden das CMD-Fenster mit der Fehlermeldung "java.lang.NoClassDefFoundError". Die Jar-Datei läuft auf allen anderen Computern problemlos - es hat also nichts mit der Jar-Datei zu tun. Ich habe es auch schon mit anderen Jar-Dateien probiert, auf seinem Netbook erscheint immer dieselbe Fehlermeldung. Er hat Java auch schon deinstalliert und neu installiert, es ist die neueste Version von Java installiert.

Für mich hängt das eindeutig mit der Java-Konfiguration auf seinem Computer zusammen. Aus irgendeinem Grund sucht seine JVM immer am falschen Ort nach den Klassen. Umgebungsvariabeln setzen habe ich auch schon probiert (v.a. CLASSPATH). Hat mir jemand einen Tipp, was ich noch probieren könnte? Das müsste doch hinzukriegen sein...

Danke schon im Voraus
Tsserver

PS: Im Übrigen fand ich es merkwürdig, dass nach der Installation von Java die Jar-Dateien mit einem Datenkompressionsprogramm verknüpft waren und nicht mit "Java (TM) Platform SE Binary" wie auf allen anderen PCs - vielleicht hat das auch etwas damit zu tun.
 
Was sagt er denn in der Exception, was er nicht finden kann? main oder was anderes? Hast du die JAR mal entpackt auf seinem Rechner und geschaut, ob die entsprechende class da ist (man weiß ja nie :P)?
 
Gib mal bitte auf der Commandline "java -version" ein.
Fuer mich klingt das nach fehlenden PATH EIntraegen.

Jars sind nur Zips ohne Kompression, daher verstaendlich, dass es sich auch mit WinRar und Konsorten oeffnen laesst.
 
Besten Dank erstmal für die Tipps.

Nachfolgend der Stacktrace:
D:\>Voc.jar
Exception in thread "main" java.lang.NoClassDefFoundError: D:\Voc/jar
Caused by: java.lang.ClassNotFoundException: D:\Voc.jar
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)
Could not find the main class: D:\Voc.jar. Program will exit.

D:\>java -version
java version "1.6.0_30"
Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
Java HotSpot(TM) Client VM (build 20.5-b03, mixed mode)

Die Klassen sind alle vorhanden in der Jar-Datei, das habe ich überprüft.
 
Zuletzt bearbeitet:
"D:\Voc.jar" ist keine Klasse. Ist "Voc.jar", die Datei, die aufgerufen werden soll? Was passiert wenn man "java -jar voc.jar" von der Kommandozeile aufruft? Wie sieht die MANIFEST.MF des Jars aus?
 
Ja, Voc.jar ist die aufzurufende Datei. Mit der Command "java -jar voc.jar" hat's geklappt, das Programm liess sich endlich öffnen. Vielen Dank. :-)
Wieso muss ich extra java -jar voc.jar eingeben ? Was ist bei der JVM falsch eingestellt, dass er die Klassen nicht automatisch in der ausgeführten Jar-Datei sucht (so wie auf allen anderen PCs auch) ?

Die Datei MANIFEST.MF enthält Folgendes:
Manifest-Version: 1.0
Main-Class: controller.Voc

controller.Voc ist effektiv meine Main-Class, also die Klasse, die bei Programmstart aufgerufen wird.
 
Das Problem ist, wie schon vermutet, dass .jar Dateien nicht mit dem Java Launcher verknüpft sind, sondern mit einem Kompressionsprogramm. Mit "java -jar voc.jar" machst Du das, was Du eigentlich per Doppelklick im Dateimanager erledigen möchtest.

Um die Verknüpfung zu ändern, im Dateimanager eine .jar Datei auswählen, rechte Maustaste, Eigenschaften und für "Öffnen mit" den Java Launcher auswählen. Wenn dort kein passender Eintrag angezeigt wird, "javaw" im Java bin Ordner setzen.
 
Das funktioniert eben nicht.

Wenn ich bei der Jar-Datei "Öffnen mit" anwähle und "Java(TM)SE Platform binary" auswähle, kommt die erwähnte Fehlermeldung für ein paar Millisekunden im CMD-Fenster (NoClassDefFoundError). Wenn ich bei "Öffnen mit" hingegen im bin-Ordner "javaw.exe" auswähle kommt eine Windows-Fehlermeldung (kein CMD-Fenster) mit dem Titel "Java Virtual Machine Launcher" und dem Text "Could not find the main class: D:\Voc.jar. Program will exit."

An was kann das liegen ? Das Datendekompressionsprogramm habe ich übrigens mittlerweile deinstalliert und Java einmal mehr neu installiert (mit Reboot).
 
tsserver schrieb:
Wenn ich bei "Öffnen mit" hingegen im bin-Ordner "javaw.exe" auswähle kommt eine Windows-Fehlermeldung (kein CMD-Fenster) mit dem Titel "Java Virtual Machine Launcher" und dem Text "Could not find the main class: D:\Voc.jar. Program will exit.

:rolleyes:

Dann hilft nur noch ein Eingriff in der Registry. Der relevante Schlüssel heißt "jarfile". Müsste in mehreren Bereichen definiert sein. Und dann ist unter "shell/open/command" der Pfad zum Launcher zu finden. Dort fehlt dann der Parameter. Bei mir steht hier

Code:
"C:\Java\jre6\bin\javaw.exe" -jar "%1" %*

(und zwar genau so, mit allen Hochkommata)

EDIT: Dieses Programm sollte die Korrekturen automatisch durchführen: Jarfix
 
Zuletzt bearbeitet:
Ja genau, das war's. In den Registryeinträgen war immer noch dieses doofe Datenkompressionsprogramm mit .jar verknüpft (in HKEY_CLASSES_ROOT). Dort habe ich jetzt den Standardwert "jarfile" eingegeben, neu gestartet und ich konnte die Jar-Datei ohne CMD starten. :)

Danke an alle, die zur Lösung des Problems beigetragen haben.
 
Zurück
Oben