実行時にクラスを正常にロードし、そのクラスで 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つのクラスローダーに対して正常にロードされたが、他のクラスローダーがクラスについて知らないということですか? 本当にわからない。助けてください、ありがとう。