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

标签 java classloader urlclassloader

首先我要说的是,我在 Java 方面并不是最好的,所以我可能错过了一些非常简单的东西......

我正在开发一个插件系统,在 Eclipse 中一切都工作得很好,但当我实际在它之外启动小程序时就不行了。

我正在尝试从目录加载 .class 文件并执行它,我知道为什么它不起作用,我只是不知道该怎么解决它。

问题是 Eclipse 在类路径中引用小程序本身,但它没有在 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");
    }
}

这个问题已经困扰我一周了,我不知道该怎么办。 :/

最佳答案

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

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

关于java - 我该如何解决这个类加载器问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12777311/

相关文章:

java - tomcat-dbcp 与 commons-dbcp

java - 如何根据给编辑 TextView 的计数值动态实现线性布局的代码

java - TCP Java 服务器,Python 客户端字符串不相等

java - 垃圾收集器如何更新推送到操作数堆栈的引用?

java - 使用 ClassLoader 和 Class.forName 加载类的区别

java - ClassNotFoundException 即使包含该类的 jar 正确存在于类路径中

java - 在 WildFly/JBoss 中设置 TCCL

java - 在tomcat中重新加载类文件

运行外部代码/应用程序的 Android 应用程序?

java - 是否可以将 .class 文件添加到 URLClassLoader 的 urlpath 中