2010-11-01 53 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

也許是因爲你試圖從「動態類」路徑加載該接口?當你將界面放在那裏時會發生什麼?

相關問題