NoClassDefFoundError与java反射

NoClassDefFoundError与java反射,java,reflection,classloader,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.newInstanc

我使用以下代码动态加载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(); 
URL=new File(ACTIONS_PATH).toURI().toul();
URLClassLoader-clazzLoader=新的URLClassLoader(新的URL[]{URL});
clazz=(类)clazzLoader.loadClass(名称);
返回clazz.newInstance();
这段代码适用于简单类(没有继承或接口),但我要加载的类实现了一个接口(类加载器可以使用
findClass
找到该接口) 当我调用class.newInstance时,我得到了提到的异常。 我做错了什么


谢谢。

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

当类实际被解析时,您将得到异常,因此在加载的类中出现的类也将被加载。如果将
clazloader.loadClass(名称)
更改为
clazloader.loadClass(名称,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(); 
URL=new File(ACTIONS_PATH).toURI().toul();
URLClassLoader-clazzLoader=新的URLClassLoader(新的URL[]{URL},getClass().getClassLoader());
clazz=(类)clazzLoader.loadClass(名称);
返回clazz.newInstance();

我不确定您的问题,但要编写
Class
,您应该加载Class
RatingAction
,但必须已加载此类型才能编写此操作。你的意思是说
ClassI能够通过简单地使用
Class.forname(name)来规避这个问题吗.newInstance
但我很乐意理解为什么原始代码不起作用,因为这次您没有使用自定义的cloassloader。您在这里使用的同一个URLClassLoader是否能够找到接口?@Paulo是的,类加载器可以找到接口