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并且 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运行时类路径中的。您需要使用-cp参数运行 jar。

于 2012-03-02T22:03:33.160 回答
0

type抛出运行时异常时的值是多少?如果您阅读了 java 文档Converts a String representation of an Type into its numeric value。它可能通过反射或一些垃圾实例化它来做到这一点。如果您为没有关联的类型字符串运行此方法,Type我认为您收到此错误是完全合理的。

第 1 步:打印字符串类型并确保该类型的类在类路径中。

于 2012-03-02T22:05:14.627 回答