Ich habe eine GUI-Anwendung, die mit Swing und einer Graphikbibliothek eines Drittanbieters namens GraphStream (es gibt 2 JARs) erstellt wurde. Dies ist wahrscheinlich ein Klassenpfadproblem und unabhängig von der Bibliothek selbst.Konnte Java GUI nicht sporadisch vom Befehl ausführen
Wenn ich von Eclipse starte, erscheint die GUI und es gibt keine Fehler/Warnungen.
Wenn ich jedoch versuche, über die Befehlszeile auszuführen, erhalte ich entweder NoClassDefFoundError, oder die Anwendung wird ausgeführt und bleibt beim Laden der Bibliotheken unbegrenzt hängen. Dies scheint völlig sporadisch zu sein. Manchmal wird der Fehler gedruckt, und manchmal hängt die JVM einfach. Dies ist, wie ich bin mit der Anwendung:
java -verbose -classpath '../lib;.' -cp . bt_sim <args>
Die beiden JAR-Dateien sind in der „../lib“ Verzeichnis (und das sind die einzigen zwei Dateien in diesem Verzeichnis). Außerdem sind die Klassen, die ich geschrieben habe, in "." - Wenn ein Fehler tatsächlich angehoben wird, dann ist dies die Ausgabe:
... Other loading output from JVM debug ...
[Loaded java.util.IdentityHashMap$KeySet from C:\Program Files\Java\jre8\lib\rt.jar]
java.lang.NoClassDefFoundError: org/graphstream/graph/Graph
at bt_sim.main(bt_sim.java:70)
Caused by: java.lang.ClassNotFoundException: org.graphstream.graph.Graph
at java.net.URLClassLoader$1.run(Unknown Source)
Und wenn die Anwendung hängt:
...
[Loaded java.util.Formatter$Flags from C:\Program Files\Java\jre8\lib\rt.jar]
[Loaded java.util.Formatter$Conversion from C:\Program Files\Java\jre8\lib\rt.jar]
[Loaded sun.misc.Cleaner from C:\Program Files\Java\jre8\lib\rt.jar]
Der gleiche Fehler auftritt, auch wenn ich von einer Linux-Umgebung ausgeführt werden. In allen Fällen laufe ich mit JRE 8. In Eclipse und bei der Ausführung über die Befehlszeile sind nur ZWEI JAR-Dateien enthalten (Graphikabhängigkeiten des Drittanbieters). Die JAR-Dateien befinden sich in meinem obigen Befehl im Verzeichnis "lib". Irgendwelche Ideen, was zu untersuchen wäre super hilfreich!
meine Lösung Ich wusste nicht, dass ich ausdrücklich jedes Dritt JAR auf dem Classpath enthalten musste. Nachdem ich dies tat, ausgeführt die Anwendung als erwartet: -/
Kudos für die Verwendung von '-verbose', um die Diagnose zu führen. – trashgod