2012-10-08 64 views
2

讓我先說開始我不是最好的,在Java的,所以我可能錯過了一些東西很簡單......我該如何解決這個類加載器問題?

我工作的一個插件系統上,一切工作在eclipse完全正常,但不是我實際上在其外部啓動applet。

我想從一個目錄加載一個.class文件並執行它,我知道它爲什麼不起作用我只是不知道該怎麼做才能解決它。

問題在於Eclipse在類路徑中引用了applet本身,但它沒有在eclipse之外的類路徑中引用,並且我無權訪問-cp-classpath,我只能通過一個設計用於加載具有固定類路徑的jar的啓動器。

關於我將如何解決這個問題的任何想法?

裝載代碼:

final ClassLoader loader = new URLClassLoader(new URL[] { new File("C:/Plugin/Directory/").toURI().toURL() }); 
final Class<?> c = loader.loadClass("PluginFile"); 
Object s = c.newInstance(); 
s.getClass().getMethod("onLoad").invoke(s); 

插件代碼:

import net.plugintest.pluginsystem.*; 

public class PluginFile extends ClientPlugin 
{ 
    private String Author = "Plugin Author"; 
    private String Description = "Plugin Description" 
    private Player p = new Player(); 

    @Override 
    public void onLoad() 
    { 
     p.talk("Testing"); 
    } 
} 

這個問題一直在推動我逼瘋了一個星期了,我不知道該怎麼辦。 :/

+0

使用的URLClassLoader來加載你想在你的classpath太 參考類:HTTP:/ /stackoverflow.com/questions/252893/how-do-you-change-the-classpath-within-java –

+0

你得到的例外是什麼? –

+0

'java.lang.ClassNotFoundException:net.plugintest.pluginsystem.ClientPlugin' – user1728017

回答

2

我不知道,但嘗試提供父類加載到您所創建的類加載器,如:

ClassLoader parent = Thread.currentThread().getContextClassLoader(); 
// or 
// ClassLoader parent = getClass().getClassLoader(); 
ClassLoader loader = new URLClassLoader(new URL[] { new File("C:/Plugin/Directory/").toURI().toURL() }, parent); 
+0

不,我仍然得到'java.lang.ClassNotFoundException:net.plugintest.pluginsystem.ClientPlugin':/ – user1728017

+0

啊我覺得像一個derp。你的答案幫助了我,而不是'Thread.currentThread()。getContextClassLoader()'我使用了'ClientPlugin.class.getClassLoader()',它解決了我的問題。 :P – user1728017