gpt4 book ai didi

为静态方法抛出 java.lang.NoClassDefFoundError 而不是为静态成员抛出

转载 作者:行者123 更新时间:2023-11-29 06:02:47 24 4
gpt4 key购买 nike

使用 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 中的其他类正确使用了该库。

为什么以及如何发生这种情况?我该如何进一步调试?

谢谢!

编辑

Jon Skeet 是正确的。一位 friend 向我展示了如何使用 javap -c,我将值更改为更明显的值 Type.AAAA,其值为 28:

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

最佳答案

听起来您在执行时缺少 dnsjava 库。

这对 Type.A 无关紧要,因为它是一个常量 - 该值由编译器提取并直接嵌入到您的代码中,就好像您已将其指定为整数文字。它不需要库在执行时出现。但是,当您调用方法时显然不是这种情况。

关于为静态方法抛出 java.lang.NoClassDefFoundError 而不是为静态成员抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com