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 !!

}

关于问题可能是什么,我唯一的猜测是该类已为一个类加载器成功加载,但另一个类加载器不知道该类?我真的不知道。请帮忙,谢谢。

4

1 回答 1

1

您需要在 Class.forName(); 中指定类加载器(已加载您的模型类)作为参数;

看到这个!

于 2013-09-24T14:05:08.703 回答