2012-10-08 42 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