gpt4 book ai didi

Java加载插件jar ClassNotFoundException

转载 作者:行者123 更新时间:2023-12-01 12:42:16 35 4
gpt4 key购买 nike

我是新来的,很抱歉我的英语不好;)。

我尝试使用以下代码在 java 中加载插件 jar:

package testprogramm;

import java.io.File;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.HashSet;
import java.util.Set;

public class TestProgramm {
private static Set<Plugin> plugins = new HashSet<Plugin>();
private static TestProgramm instance = new TestProgramm();

public static void main(String[] args) {
System.out.println("TestProgramm v0.1");

File pluginsDirectory = new File("plugins");

if (pluginsDirectory.exists() && pluginsDirectory.isDirectory()) {
for (File pluginFile : pluginsDirectory.listFiles()) {
if (pluginFile.exists() && pluginFile.isFile() && pluginFile.getName().endsWith(".jar")) {
try {
URL[] urls = new URL[] {pluginFile.toURI().toURL()};
ClassLoader loader = new URLClassLoader(urls);
Class c = loader.loadClass("src." + pluginFile.getName().toLowerCase().replace(".jar", "") + ".Main");
Object pluginObject = c.newInstance();

if (pluginObject instanceof Plugin) {
Plugin plugin = (Plugin) pluginObject;
plugins.add(plugin);
plugin.init(instance);
plugin.onEnable();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

while (true) {
if (true) { //code
break;
}
}

for (Plugin plugin : plugins) {
plugin.onDisable();
}
}

public int getInt() {
return 5;
}
}

插件类:

package testprogramm;

public abstract class Plugin {
protected TestProgramm testProgramm;

protected void init(TestProgramm testProgramm) {
this.testProgramm = testProgramm;
}

public TestProgramm getTestProgramm() {
return testProgramm;
}

public abstract void onEnable();
public abstract void onDisable();
public abstract void onEvent1(String eventInfo);
public abstract void onEvent2(String eventInfo);
public abstract void onEvent3(String eventInfo);
}

插件 jar 中的类:

package ownplugin;

import testprogramm.Plugin;

public class Main extends Plugin {
@Override
public void onEnable() {
System.out.println("OwnPlugin enabled");
}

@Override
public void onDisable() {
System.out.println("OwnPlugin disabled");
}

@Override
public void onEvent1(String arg0) {

}

@Override
public void onEvent2(String arg0) {

}

@Override
public void onEvent3(String arg0) {

}
}

我得到这个ClassNotFoundException:

java.lang.ClassNotFoundException: src.ownplugin.Main
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at testprogramm.TestProgramm.main(TestProgramm.java:26)

我能做什么?怎么了。请帮助我。

最佳答案

您似乎正在尝试使用名为src.ownplugin.Main的类。但是,您的 Main 类实际上称为 ownplugin.Main。尝试替换这个

Class c = loader.loadClass("src." + pluginFile.getName().toLowerCase().replace(".jar", "") + ".Main");

有了这个

Class c = loader.loadClass(pluginFile.getName().toLowerCase().replace(".jar", "") + ".Main");

关于Java加载插件jar ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986376/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com