2

「MyClassLoader」という名前の URLClassLoader にいくつかの jar を設定しています。私が試したら

MyClassLoader.loadClass("MyClass");

できます。

私が試したら

Thread.currentThread().setContextClassLoader(MyClassLoader);
Thread.currentThread().getContextClassLoader().loadClass("MyClass");

それも機能します。

でもやってみたら

Thread.currentThread().setContextClassLoader(MyClassLoader);
Class.forName("MyClass");

をスローしClassNotFoundExceptionます。

もちろん、Class.forNameこれは単なる例です。使用しようとするとMyClass、同様に例外がスローされます。

これはおそらく、私がどのように機能するのか理解していないことを意味しますsetContextClassLoader。誰かが私にこれを明確にし、それを理解するのを手伝ってくれませんか?私のコードを機能させるにはどうすればよいですか? ありがとうございました。

4

1 に答える 1

3

public static Class forName(String className) は ClassNotFoundException をスローします

指定された文字列名を持つクラスまたはインターフェースに関連付けられた Class オブジェクトを返します。このメソッドの呼び出しは、次と同等です。

Class.forName(className, true, currentLoader) currentLoader は、現在のクラスの定義クラス ローダーを示します。

試す:

Class.forName("MyClass", true, MyClassLoader);

[Class.forName(String, boolean, ClassLoader][1]

発生している可能性のある問題は、カスタム ClassLoader でロードしたクラスに forName を付けようとしている場合です。ただし、呼び出しを行うクラスをロードした ClassLoader を暗黙的に使用する forName の形式を使用しています。ほとんどの場合、これはシステム ClassLoader になります。

ClassLoader は複雑になる可能性があります。

[1]: http://java.sun.com/javase/6/docs/api/java/lang/Class.html#forName(java.lang.String , boolean, java.lang.ClassLoader)

于 2009-07-03T07:37:45.570 に答える