使用java反射的NoClassDefFoundError

时间:2011-05-15 13:16:40

标签: java reflection classloader

我使用以下代码在java中动态加载一个类:

URL url = new File(ACTIONS_PATH).toURI().toURL();
URLClassLoader clazzLoader = new URLClassLoader(new URL[]{url});
Class<RatingAction> clazz =  (Class<RatingAction>) clazzLoader.loadClass(name);
return clazz.newInstance(); 

此代码适用于简单类(无继承或接口),但我要加载的类是实现一个接口(类加载器可以使用findClass找到) 当我调用class.newInstance时,我得到了提到的异常。 我做错了什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

您的类路径有问题。我的猜测是因为你没有定义父类加载器 - “url”是否包含所有需要的类,包括系统类?

当实际解析类时,您将获得异常,因此也会加载出现在已加载类中的类。如果您将clazzLoader.loadClass(name)更改为clazzLoader.loadClass(name, true),则会在loadClass行中获得异常。

尝试以下方法:

URL url = new File(ACTIONS_PATH).toURI().toURL();
URLClassLoader clazzLoader = new URLClassLoader(new URL[]{url}, getClass().getClassLoader());
Class<RatingAction> clazz =  (Class<RatingAction>) clazzLoader.loadClass(name);
return clazz.newInstance();