2011-02-16 4 views
0

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

> 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だけでは見つかりません。 WTFは進行中ですか?

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

答えて

1

一言:私の場合はAppArmor

、configがプログラムjavaは、新しいインストールパスからJARファイルをロードすることはできませんでした。

同様の問題が発生した場合は、/var/log/audit.logを参照してください。そこにエラーメッセージが表示されます。

1

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

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

まだ何が必要なのか理解してもらいたい場合は、インポートセクションを投稿してください。

0

例外はjava.lang.NoClassDefFoundErrorであり、正確にはClassNotFoundExceptionではありません。したがって、javapは引き続きクラスを分解できます。

NoClassDefFoundErrorとしてご存じかもしれませんが、リンクエラーとみなすことができます。私は実行時に実行するためにいくつかの必要なクラスがないことを推測する傾向がありますorg.gudy.azureus2.ui.swt.Main 私はそれがクラスパス上でより多くのJARを必要とすると思います。 だから、org.gudy.azureus2.ui.swt.Mainが利用可能である(そのためjavapが動作する)が、依存関係の1つは実行時に見つからない。

また、実行中のSWTは時々

編集 はここでより多くのクラスパスのJARを示しています1 Azureus shell scriptへのリンク、である(私はあなたがこれを知っていると思いますあなたのSOの評判を見て)swtライブラリに-Djava.library.pathセットが必要です。

関連する問題