2012-02-04 4 views
1

突然、以前に動作していたアプリケーションの中で、私はNoClassDefFoundError (wrong name)が私に困惑しています。私はXMLバインディングフレームワークを使用しています。これはリクエストされたときにバインドされたクラスを解決しようとしました。ClassLoader.loadClass()をクラス名で設定しています。 (なぜ、それはこの場合、私の外にあるように振る舞うのですか?)今、私はちょうどjava.lang.ClassLoader.defineClass()で言及された例外を取得します。メソッドのドキュメントでは、パラメータnameが指定されたクラスのバイナリ名と等しくない場合、NoClassDefFoundErrorがスローされます。私はそのような場合には1が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) 
    .... 

フォームの例外を取得する予定であることを認識しています、これは私が実際に見る成果ですが、奇妙なことが、私の場合で報告ABがまったく同じであるということです!私はアプリをデバッグしようとしました。 JDKソースの行は、sourceの値はOKです。JDKソースの行は、次のようになります。sourceの値はOKです。バイト配列bをクラスファイルに保存し、デコンパイラでそれを調べたところ、もう一度OKです。もちろん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ある。

+0

アプリケーションを変更して再コンパイルしましたか?もしそうなら、それは何でしたか? –

+0

私に訂正してください:私は実際にアプリケーションのこの部分をテストしていないので、バグが常にそこにあった可能性があります。 – Saintali

答えて

4

解決済み。ちょうど恥ずかしい大文字の問題。 ABの名前はNoClassDefFoundError: A (wrong name: B)で実際はとなりましたは大文字で異なります。

これは、大文字小文字を区別しないファイルシステムのため、Windowsで発生します。 FooBarという名前のクラスを検索し、そのフォルダにファイルFoobar.classが含まれている場合、クラスローダーはクラスファイルを開きますが、内部的には別の名前を検出します。したがって、例外。

+0

これについて詳しく教えてください。私は何かに似ています。 – Magpie

+0

@Magpieが更新されました。 – Saintali

0

クラスAとBのチャンスのためのパッケージ宣言を確認してください彼らはいずれかのいくつかのパッケージ内のパッケージ宣言やパッケージ宣言がないわけではないされています正しい。

関連する問題