Java NoClassDefFoundError:A(错误名称:A)

Java NoClassDefFoundError:A(错误名称:A),java,classloader,noclassdeffounderror,Java,Classloader,Noclassdeffounderror,在一个以前工作的应用程序中,我突然遇到了一个NoClassDefFoundError(错误的名称),这让我很困惑。我使用的是一个XML绑定框架,它试图在请求时通过使用配置的类名调用ClassLoader.loadClass()来解析绑定的类。(在本例中,我无法理解为什么它的行为会如此。)现在我得到了刚才在java.lang.ClassLoader.defineClass()中提到的异常。该方法的文档说明,如果参数name不等于指定类的二进制名称,则该方法将抛出NoClassDefFoundErr

在一个以前工作的应用程序中,我突然遇到了一个
NoClassDefFoundError(错误的名称)
,这让我很困惑。我使用的是一个XML绑定框架,它试图在请求时通过使用配置的类名调用
ClassLoader.loadClass()
来解析绑定的类。(在本例中,我无法理解为什么它的行为会如此。)现在我得到了刚才在
java.lang.ClassLoader.defineClass()中提到的异常。该方法的文档说明,如果参数
name
不等于指定类的二进制名称,则该方法将抛出
NoClassDefFoundError
。我知道,在这种情况下,人们希望得到一个例外的形式

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)
    ....
这是我实际看到的结果,但奇怪的是,在我的例子中,报告的
A
B
完全相同!我试着调试这个应用程序。JDK源代码中的行内容如下:

        c = defineClass1(name, b, off, len, protectionDomain, source);
source
的值正常。我将字节数组
b
保存到一个类文件中,并用反编译器检查了它,它又正常了。当然
Class.forName()
始终报告相同的错误,但真正有趣的是,如果我在调试模式下设置
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.JettyLancher.WebAppContextWithReload.WebAppClassLoaderExtension
,以防出现问题。

检查类A和B的包声明。它们可能在某些包中没有包声明,或者包声明不正确

检查类A和B的包声明。很可能它们在某些包中没有包声明,或者包声明不正确。

已解决。只是一个令人尴尬的大写问题。
NoClassDefFoundError:A(错误名称:B)中的名称
A
B
实际上不同于大写字母


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

只是一个令人尴尬的大写问题e、
NoClassDefFoundError:A(错误名称:B)
中的名称
A
B
实际上存在大小写差异


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

是否进行了任何更改并重新编译了应用程序ion?如果是,那是什么?让我更正一下:我没有实际测试应用程序的这一部分,所以很可能错误一直存在。你是否做了任何更改并重新编译了你的应用程序?如果是,那是什么?让我更正一下:我没有实际测试应用程序的这一部分,所以很可能错误一直存在。可以吗你能详细解释一下吗?我被困在类似的事情上了。你能详细解释一下吗?我被困在类似的事情上了。