我试图为我的一个java项目创建一个插件系统,所以我试着用classloader做这个,但是当我尝试我的方法时,它给了我一个ClassNotFound异常。我无法让它工作,有人可以帮助我吗?抱歉我的英语不好。
我的方法:
public void loadPlugin(String jarname) throws Exception {
File f = new File("server'\\" + jarname + ".jar");
URL url = f.toURL();
URL[] urls = new URL[]{url};
URLClassLoader child = new URLClassLoader (urls, this.getClass().getClassLoader());
Class classToLoad = Class.forName ("me.daansander.plugin.Plugin", true, child);
Method method = classToLoad.getDeclaredMethod ("onEnable");
Object instance = classToLoad.newInstance ();
Object result = method.invoke (instance);
堆栈跟踪:
java.lang.ClassNotFoundException: me.daansander.plugin.Plugin
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 java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at me.daansander.serverchecker.plugin.ServerPlugin.loadPlugin(ServerPlug
in.java:59)
at me.daansander.serverchecker.plugin.ServerPlugin.start(ServerPlugin.ja
va:40)
at me.daansander.serverchecker.ServerChecker.<init>(ServerChecker.java:3
9)
at me.daansander.serverchecker.ServerChecker.main(ServerChecker.java:124
)
答案 0 :(得分:1)
要让var highlighters = new Action<HighlightFieldDescriptor<YourObject>>[3];
highlighters[0] = h => h.OnField("field1");
highlighters[1] = h => h.OnField("field2");
highlighters[2] = h => h.OnField("field3");
searchDescriptor.Highlight(h => h.OnFields(highlighters));
工作,您必须通过Class.forName()
注册新的类加载器。
另见https://stackoverflow.com/a/4096399/1015327。
或者,您可以尝试myClassloader.findClass()
。