2016-04-12 11 views
1

私は、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を含める必要がありましたことを認識していませんでした。私はこれをした後は、アプリケーションが予想通りに実行される: -/

+0

診断を導くために '-verbose'を使用するための名誉です。 – trashgod

答えて

1

-classpath-cpがエイリアスであること:

$ java -help 
    … 
    -cp <class search path of directories and zip/jar files> 
    -classpath <class search path of directories and zip/jar files> 
        A : separated list of directories, JAR archives, 
        and ZIP archives to search for class files. 

私は一緒に使用された場合、一方が他方をオーバーライドすると思われます。代わりに、ご使用のプラットフォームに必要なlibディレクトリとパス区切り文字を含むformを使用してください。

+0

ええ、申し訳ありませんが、間違ったコードスニペットをコピー/ペーストしました。しかし、私はあなたに信用を伝えます。これは、クラスパス上に実際のサードパーティのJARファイルを含める必要があることを私に認識させるリンクに遭遇したからです!私はJava(多くはC++)を多用していませんが、ディレクトリを用意するだけで十分だと思いました。おそらく、JARが従わなければならない命名規則があります。しかし、CP上の2つのJARファイルへの実際のパスを設定すると、動作します。応答していただきありがとうございます。 – Jmoney38

+0

優秀;あなたがそれを整理してうれしい。何が効果があったかを反映するために質問を更新するには、[あなた自身の質問に答える](http://meta.stackoverflow.com/q/17463/163188)があります。いくつかの関連する落とし穴が検討されている[ここ](http://stackoverflow.com/search?tab=votes&q=user%3a230513%20java.ext.dirs)。 – trashgod

関連する問題