1

dnsjavaライブラリを使用していると、適切に呼び出すことはできるがType.A、呼び出すType.value(str)java.lang.NoClassDefFoundError.

System.out.println(org.xbill.DNS.Type.A);    // works

if (org.xbill.DNS.Type.value(type) == -1) {  // throws NoClassDefFoundError
  /* logic */
}

このコードは から実行されてjarおり、jar 内の他のクラスはライブラリを正しく使用しています。

なぜ、どのようにこれが起こっているのでしょうか? これをさらにデバッグするにはどうすればよいですか?

ありがとう!

編集

ジョン・スキートは正しかった。友人が使用方法を教えてくれたjavap -cので、値をより明確な Type.AAAA に変更しました。値は 28 です。

878: getstatic       #116; //Field java/lang/System.out:Ljava/io/PrintStream;
881: bipush  28
4

3 に答える 3

3

dnsjava実行時にライブラリが不足しているようです。

これは定数Type.Aであるため、問題ではありません。値は、整数リテラルとして指定したかのように、コンパイラによって引き出され、コードに直接埋め込まれます。実行時にライブラリが存在する必要はありません。ただし、メソッドを呼び出す場合は明らかにそうではありません。

于 2012-03-02T22:05:24.930 に答える
0

おそらくType、ランタイムクラスパスにクラスがありません。引数を指定して jar を実行する必要があり-cpます。

于 2012-03-02T22:03:33.160 に答える
0

typeランタイム例外がスローされたときのその値は何ですか? Java doc を読むと、それが表示されConverts a String representation of an Type into its numeric valueます。これはおそらく、リフレクティブにインスタンス化するか、何らかの方法でインスタンス化することによって行われます。関連付けられていない型文字列に対してこのメ​​ソッドを実行するTypeと、このエラーが発生するのは完全に合理的だと思います。

ステップ 1: 文字列型を出力し、その型のクラスがクラスパスにあることを確認します。

于 2012-03-02T22:05:14.627 に答える