出在以前工作的應用程序突然間,我得到一個NoClassDefFoundError (wrong name)
這一直困擾着我。我正在使用一個XML綁定框架,通過使用配置的類名稱調用ClassLoader.loadClass()
來嘗試在請求時解析綁定類。 (在這種情況下,爲什麼它的行爲超出了我的範圍。)現在我得到剛剛在java.lang.ClassLoader.defineClass()
處提到的例外情況。在方法的文檔說,它會拋出一個NoClassDefFoundError
如果參數name
不等於指定的類的二進制名稱。我知道,在這種情況下,一個期望得到的形式NoClassDefFoundError的:A(錯誤的名稱:A)
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
的值是OK。我將字節數組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.JettyLauncher.WebAppContextWithReload.WebAppClassLoaderExtension
在重要的情況下。
你做任何改變和重新編譯應用程序?如果這樣,那是什麼 ? – 2012-02-04 16:49:58
讓我改正:我沒有真正測試過這部分應用程序,所以錯誤一直存在。 – Saintali 2012-02-04 17:06:14