0

Vuze (Azureus) の最新バージョンをインストールした後、起動しようとすると奇妙なエラーが発生しました。

> java -Xmx128m -classpath ./Azureus2.jar:./swt.jar -Djava.library.path=/bt_work/vuze -Dazureus.install.path=/bt_work/vuze -Dazureus.script=./azureus -Dazureus.script.version=2 org.gudy.azureus2.ui.swt.Main
Exception in thread "main" java.lang.NoClassDefFoundError: org/gudy/azureus2/ui/swt/Main
Caused by: java.lang.ClassNotFoundException: org.gudy.azureus2.ui.swt.Main
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

奇妙なのはこれです:

> javap -classpath ./Azureus2.jar:./swt.jar org.gudy.azureus2.ui.swt.Main
Compiled from "Main.java"
public class org.gudy.azureus2.ui.swt.Main extends java.lang.Object{
    public static final java.lang.String PR_MULTI_INSTANCE;
...

だから...javap同じクラスパスで実行するとクラスが見つかりますが、java単独ではできません。何が起きてんだ?

両方のプログラムが同じインストール Java ( /usr/lib64/jvm/java-1.6.0-sun) から来ていることを確認しました。これは Java 6 であり、クラスは Java 5 用にコンパイルされています。マニフェストは署名されていません。JAR ファイルは読み取り可能です (unzip -tエラーは報告されません)。

4

3 に答える 3

1

一言:AppArmor

私の場合、構成では、プログラムjavaが新しいインストールパスからJARをロードすることを許可していませんでした。

同様の問題がある場合は、を調べて/var/log/audit.logください。そこにエラーメッセージが表示されるはずです。

于 2011-02-16T21:55:04.193 に答える
1

NoClassDefFoundErrorクラス自体は見つかったが、クラスローダーが必要なすべてのクラスをロードできない場合に発生します。

クラスのインポートヘッダーをチェックして、インポートorg.gudy.azureus2.ui.swt.Main.javaされたすべてのクラスがクラスパスにあることを確認できますか?そうでない場合は、jarファイルをクラスパスに追加します。

まだ必要なものを理解するのを手伝ってほしい場合は、インポートセクションを投稿してください。

于 2011-02-16T21:48:21.080 に答える
0

Your exception is java.lang.NoClassDefFoundError and not exactly ClassNotFoundException - so javap will still be able to disassemble the class.

As you might know NoClassDefFoundError can be seen as a linkage error. I tend to guess that the runtime is missing some required class to execute org.gudy.azureus2.ui.swt.Main I guess it requires more JARs on classpath. So org.gudy.azureus2.ui.swt.Main is available (that is why javap works) but one of its dependency is not found during runtime.

Also running SWT sometimes requires -Djava.library.path set to swt library (looking at your SO reputation I guess you know this)

Edit Here is a link to one Azureus shell script, which lists more classpath JARs.

于 2011-02-16T21:50:21.510 に答える