NoClassDefFoundError beim ausführen von jar
Ich bin immer ein "no class definition found" Ausnahme beim ausführen meiner Anwendung unter Windows (es läuft wunderbar auf OS X). Die Klassen der JVM beschwert sich über meine Klassen (Dritten keine Gläser benötigt). Wenn ich entpacken Sie die Dateien innerhalb der jar-Datei, die alle Dateien vorhanden sind, auch die, die der JVM ist beschweren.
Das Glas wird mit der folgenden Aufgabe:
<target name="jar" depends="">
<jar destfile="build/app.jar" >
<manifest>
<attribute name="Built-By" value="hamza"/>
<attribute name="Main-Class" value="com.hamza.driver.ui"/>
<attribute name="Class-Path" value="./"/>
</manifest>
<fileset dir="build">
<include name="**/*.class"/>
<include name="**/*.png"/>
<include name="**/*.xpi"/>
<include name="**/*.html"/>
<exclude name="**/*.jar"/>
</fileset>
</jar>
Ich kann nicht herausfinden, was das problem verursacht. Wenn ich entpacken Sie das jar und führen Sie das jar aus dem Verzeichnis entpackt ich das Klasse, alles funktioniert einwandfrei. Also, ich gehe davon aus, dass alle gewünschten Dateien innerhalb der jar-Datei.
EDIT: com.hamza.driver.ui
ist eine Klasse in einem Paket namens com.hamza.driver
die main
.
Nach zu bauen, bekomme ich eine jar "app.jar" und als ich es starten mit "java -jar app.jar", die führt problemlos auf OS X, nicht jedoch unter Windows.
Wenn ich entpacken app.jar
in ein separates Verzeichnis und führen Sie "java-jar app.jar" es excutes in Ordnung.
EDIT 2: Ausnahme:
Exception in thread "main" java.lang.NoClassDefFoundError: com/hamza/gui/tr Transfer/ClipboardTransferHandle bei com.hamza.- Treiber.ui.main(Unknown Source) Verursacht durch: java.lang.ClassNotFoundException: com.hamza.gui.transfer.Clipboa rdTransferHandle bei java.net.URLClassLoader$1.run(Unknown Source) bei java.Sicherheit.AccessController.doPrivileged(Native Method) bei java.net.URLClassLoader.findClass(Unknown Source) bei java.lang.ClassLoader.loadClass(Unknown Source) bei der sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) bei java.lang.ClassLoader.loadClass(Unknown Source) bei java.lang.ClassLoader.loadClassInternal(Quelle Unbekannt) ... 1 mehr
ClipboardTransferHandle .class Dateien in die jar.
EDIT 3: Importe für die clip-board class:
import java.util.die Protokollierung.Logger; import java.das awt.datatransfer.Zwischenablage; import java.das awt.datatransfer.ClipboardOwner; import java.das awt.datatransfer.Übertragbar; import java.das awt.datatransfer.StringSelection; import java.das awt.datatransfer.DataFlavor; import java.das awt.datatransfer.UnsupportedFlavorException; import java.das awt.Toolkit; import java.io.IOException;
Beim spielen mit ihm, ich fand, dass wenn ich versuche zu erklären ClipboardTransferHandle
als statische variable in der Treiber, es funktioniert, aber jedes Objekt, das nicht statisch ist, nicht gefunden.
Die wichtigsten GUI-Elemente sind statische Variablen, also die GUI aufgebaut ist, aber andere Elemente nicht; alles, was nicht statische Ursachen NoClassDefFound
, aber wenn ich erkläre Sie für statische Tests, die Sie arbeiten.
Zeigen genauen Aufruf-Befehl - wie "java-jar my.jar". Wenn möglich, verlinken Sie das Glas in Frage.
Was sind die Importe in die com.hamza.gui.tr Transfer.ClipboardTransferHandle Klasse?
InformationsquelleAutor Hamza Yerlikaya | 2009-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist das problem, das Auftritt,
wenn die JAR-Datei wurde geladen "C:\java\apps\appli.jar" und Ihr manifest-Datei den Class-Path: Referenz "lib/other.jar" die Klasse loader Aussehen wird "C:\java\apps\lib\" "other.jar". Es wird nicht Blick auf die JAR-Datei-Eintrag "lib/other.jar".
Lösung:-
öffnen Sie das terminal,geben Sie den richtigen Pfad zu deiner jar und führen Sie es mit diesem Befehl java-jar abc.jar
Nun, was passieren wird, ist der class-loader Aussehen wird, in die richtigen Ordner für die referenzierten JARS da Sie nun vorhanden sind, in den gleichen Ordner, in dem Ihre app JAR..Es gibt keine "java.lang.NoClassDefFoundError" Ausnahme geworfen jetzt.
Dieser arbeitete für mich... Hoffe, es funktioniert Sie auch!!!!!
InformationsquelleAutor Gautam Mandsorwale
Welche Klasse fehlt? Deine Main-Class-Attribut sieht ein wenig suspekt-ist com.hamza.- Treiber.ui, eine Klasse oder ein Paket?
InformationsquelleAutor Dominic Cooney
Gibt es eine chance, dass die NoClassDefFoundError (ich hasse diesen Fehler immer und treibt mich verrückt...) nicht geworfen wird, weil es nicht die Klasse zu finden, es sagt Ihnen, (- > Ihrer Klasse), sondern weil java nicht finden können, eine der Klassen, die instanziiert die Klasse.
Ich hatte dieses problem einmal, wenn eine Klasse importiert eine andere Klasse aus einem anderen Topf (in meinem Fall: ein OSGi-bundle), die noch nicht richtig exportiert. Dies war zwar ein OSGi-spezifischen problem - Sie haben möglicherweise die gleichen Probleme in Ihrer Umgebung. Vielleicht ist Ihre Anwendung hängt von einigen Klassen, die vorhanden sind, in Ihrer aktuellen OS-X-Umgebung aber nicht in der eigentlichen Fenster-Umgebung. Ich bin nicht auf der Suche bei third-party-Bibliotheken, sondern auf die Java-Implementierungen selbst.
Glück!
Bearbeiten
Gibt es zwei weitere sehr ähnliche Frage ALSO leider mit Nein akzeptierte Lösung gefunden, aber vielleicht einer der Tipps dort helfen kann in Ihrem Fall:
NoClassDefFound beim ausführen einer jar
NoClassDefFoundError innerhalb jar
Edit 2
Hier ist ein ähnliches problem, dass hat eine akzeptierte Antwort. Hoffe, das hilft:
NoClassDefFoundError beim Versuch zu laufen, mein Glas mit java.exe -jar...was ist falsch?
Ah - OK, Las nicht aufmerksam genug.
Möchte nur dass du weißt, dass 7 Jahre später, Sie hat mich gerettet aus einer Menge (mehr) Frust, vielen Dank!
InformationsquelleAutor Andreas_D
Haben Sie angegeben, die neue jar-Datei in den classpath (java -cp .;new.jar MainClass.class)?
InformationsquelleAutor bwobbones