2010-11-01 57 views
2

我们有一个servlet项目,它包含(在许多其他类中)我们公开给用户的界面。ClassNotFoundException在动态加载类文件时抛出

用户可以编译他们自己的实现提供的接口的类(以.class文件的形式),并将它们放置在我们的项目知道的文件夹中。当servlet启动时,它使用URLClassLoader加载该文件夹中的所有.class文件。 (所以用户可以挂钩到某些事件中。)

据我所知,类文件位于并正确加载,种。当加载用户的编译后的.class文件时,抛出了ClassNotFoundException异常,但它抱怨接口,它应该已经在类路径中。

Caused by: java.lang.ClassNotFoundException: com.company.project.OurInterface 
at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:251) 
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 

当动态加载.class文件时,是否有原因找不到接口?

回答

2

也许你还没有指定的父类加载器为您URLClassLoader

您的应用程序的类加载器应该是动态类加载器的父类加载器:。

ClassLoader dynamicClassLoader = 
    new URLClassLoader(..., OutInterface.class.getClassLoader()); 
+0

我几乎在我的问题中提到了将类路径类加载器“附加”到URLClassLoader的可能性,我只是对行话有点熟悉,但你的方法听起来似乎合理,我会给它一个机会让你知道。谢谢。 – 2010-11-01 21:52:20

+0

就是这样。:) – 2010-11-01 21:53:24

+0

这也帮了我很多 - 这让我有点生气。干杯:) x。 – Danny 2013-07-27 12:28:40

0

也许是因为你试图从“动态类”路径加载该接口?当你将界面放在那里时会发生什么?

相关问题