2013-02-18 52 views
1

我的問題是,我在Java6上工作的代碼不再工作。 由於我的應用程序需要加載的jar的在運行時(插件),我寫myselt一個簡單的類從URLClassLoader的派生這樣Java 7:使用URLClassLoader不再工作

public class MyClassLoader extends java.net.URLClassLoader { 

/** Creates a new instance of URLClassLoader */ 
public MyClassLoader(java.net.URL url) 
{ 
    super(new java.net.URL[]{url},ClassLoader.getSystemClassLoader()); 
} 

public void addURL(java.net.URL url) 
{ 
    super.addURL(url); 
}} 

所以,如果我想加載一個罐子,我只需調用addURL(pathToJar)和載荷通過

Class.forName(myClass, true, myClassLoader) 

這工作就像在Java6上運行的魅力。 現在我決定在Java7中製作一個自包含的Java應用程序。 當我啓動應用程序時,jar也會在運行時被加載,但是如果裏面有一個派生自classpath內部的類(不在插件jar中)的類,我會得到一個ClassCastException。

所以我猜Java7中的某些內容已經發生了變化。 目前我在OSX上使用Java7_u13。 任何人都可以告訴我應該做什麼,讓舊的行爲恢復嗎?搜索網絡還沒有得到任何幫助。

非常感謝提前。

問候,-chris-

回答

3

同時,我找到了解決我的問題。我只是用'錯誤的'類加載器作爲父類。現在一切工作正常,如果我更換

super(new java.net.URL[]{url},ClassLoader.getSystemClassLoader()); 

super(new java.net.URL[]{url},MyClassLoader.class.getClassLoader()); 

問候,-chris-