我该如何解决这个类加载器问题?

时间:2012-10-08 07:42:36

标签: java classloader urlclassloader

首先让我说我不是最好的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");
    }
}

这个问题一直困扰我一个星期,我不知道该怎么办。 :/

1 个答案:

答案 0 :(得分:3)

我不确定但是尝试为您创建的类加载器提供父类加载器,例如:

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