1

実行時にクラスを正常にロードし、そのクラスで newInstance() を呼び出し、そこからオブジェクトを作成しました。

しかし、プログラムの後半で、そのクラスを名前で再度検索しようとしています。そして、何らかの理由で、プログラムはそれを見つけることができません。

コードは次のとおりです。

MyClassLoader mcl = new MyClassLoader();
Class<?> c = mcl.loadClass("models." + getModelClassName(), getByteCode());

MyClassLoader の loadClass メソッドは次のとおりです。

   public Class<?> loadClass(String className, byte[] classData){
           return this.defineClass(className,classData,0,classData.length);
        }

とにかく、新しくロードされたクラス「c」で newInstance を呼び出すことができるため、クラスのロードに成功したようです。

     Object o = c.newInstance();

(だから、まだ問題はありません)。

ただし、プログラムの後半で、次の呼び出しを行います。

Class<? extends DB4oModel> dbClass = null;

try{

   dbClass = (Class<? extends DB4oModel>) Class.forName("models."+className);

} catch(ClassNotFoundException e1){

      // this exception is thrown by my program !!

}

問題が何であるかについての私の唯一の推測は、クラスが1つのクラスローダーに対して正常にロードされたが、他のクラスローダーがクラスについて知らないということですか? 本当にわからない。助けてください、ありがとう。

4

1 に答える 1

1

Class.forName(); のパラメーターとして、(モデル クラスをロードした) クラスローダーを指定する必要があります。

これを見てください

于 2013-09-24T14:05:08.703 に答える