私は、SwingとGraphStreamというサードパーティのグラフ作成ライブラリ(2つのJARが含まれています)で構築されたGUIアプリケーションを持っています。これはおそらくクラスパスの問題であり、ライブラリ自体とは独立しています。sporaticallyのようなコマンドからJava GUIを実行できません
Eclipseから実行すると、GUIが表示され、エラー/警告は表示されません。
ただし、コマンドラインから実行しようとすると、NoClassDefFoundErrorが返されるか、ライブラリがロードされている間、アプリケーションが実行されて無期限に「ハング」します。これはまったく散発的なようです。エラーが表示されることもあり、時にはJVMがハングアップすることもあります。
java -verbose -classpath '../lib;.' -cp . bt_sim <args>
2つのJARファイルには、「../lib」ディレクトリにある(そして、それらは、そのディレクトリにある2つのだけのファイルです):これは私がアプリケーションを実行している方法です。さらに、私が書いたクラスは "。" - エラーが実際に発生すると、これが出力されます。
... 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)
そしてときに、アプリケーションがハングアップ:
...
[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]
私はLinux環境から実行したときに、この同じエラーも発生しています。すべての場合、JRE 8で動作しています。Eclipseでは、コマンドラインから実行すると、2つのJARファイルしか含まれていません(サードパーティのグラフ依存関係)。 JARファイルは上記の "lib"ディレクトリにあります。何を調査するかについてのアイデアは、非常に役立つでしょう!
MY SOLUTION 私はクラスパスを明示的上の各サードパーティのJARを含める必要がありましたことを認識していませんでした。私はこれをした後は、アプリケーションが予想通りに実行される: -/
診断を導くために '-verbose'を使用するための名誉です。 – trashgod