gpt4 book ai didi

java - NoClassDefFoundError: A (错误的名字: A)

转载 作者:行者123 更新时间:2023-11-29 07:16:29 27 4
gpt4 key购买 nike

在以前工作的应用程序中突然出现一个 NoClassDefFoundError (wrong name),这让我很困惑。我正在使用一个 XML 绑定(bind)框架,该框架尝试在请求时通过使用配置的类名调用 ClassLoader.loadClass() 来解析绑定(bind)的类。 (在这种情况下,为什么它的行为超出了我的范围。)现在我得到了刚刚在 java.lang.ClassLoader.defineClass() 中提到的异常。该方法的文档指出,如果参数 name 不等于指定类的二进制名称,它将抛出一个 NoClassDefFoundError。我知道在那种情况下,人们希望得到形式的异常(exception)

java.lang.NoClassDefFoundError: A (wrong name: B)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:786)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:382)
....

这是我实际看到的结果,但奇怪的是,在我的情况下,报告的 AB 完全相同!我试图调试应用程序。 JDK 源代码中的行如下:

        c = defineClass1(name, b, off, len, protectionDomain, source);

source 的值是可以的。我将字节数组 b 保存到一个类文件中,并用反编译器检查它,它再次正常。当然 Class.forName() 始终报告相同的错误,但真正有趣的事情是如果我在 Debug模式下设置 name = null我得到了这个野兽:

java.lang.LinkageError: loader (instance of  com/google/gwt/dev/shell/jetty/JettyLauncher$WebAppContextWithReload$WebAppClassLoaderExtension): attempted  duplicate class definition for name: "A"
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:786)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:382)

现在我对此一无所知 :( 感谢您的帮助。

有问题的类加载器是 com.google.gwt.dev.shell.jetty.JettyLauncher.WebAppContextWithReload.WebAppClassLoaderExtension 以防万一。

最佳答案

已解决。只是一个令人尴尬的大小写问题。 NoClassDefFoundError: A (wrong name: B) 中的名称 AB 实际上 did 大写不同。

这发生在 Windows 上,因为它的文件系统不区分大小写。如果您查找名为 FooBar 的类并且该文件夹包含一个文件 Foobar.class,则类加载器会打开该类文件,但发现它在内部具有不同的名称。因此异常(exception)。

关于java - NoClassDefFoundError: A (错误的名字: A),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9142433/

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