gpt4 book ai didi

java - 使用 URL 类加载器执行 jar 文件内容

转载 作者:行者123 更新时间:2023-11-30 07:08:49 28 4
gpt4 key购买 nike

我正在编写一个动态加载 jar 文件并执行 jar 文件内的类的应用程序。我能够加载 jar 文件并获取方法。但是当我调用该方法时,我并没有执行该方法,但也不异常(exception)。

我尝试执行的方法是公共(public)的。

        URLClassLoader urlClassLoader;
//no paramater
Class noparams[] = {};
try {
urlClassLoader = new URLClassLoader(new URL[]{new URL("file:///C:/Users/jamju02/Desktop/today/jar2.jar")});
Class pluiginClass = urlClassLoader.loadClass("plugintest.PluginTest");
// Create a new instance from the loaded class
Constructor<?> constructor = pluiginClass.getConstructor();

Object classobject = constructor.newInstance();
System.out.println(classobject.getClass().getName());
//Method method = pluiginClass.getMethod("getName");
Method[] m = pluiginClass.getDeclaredMethods();
for (int i = 0; i < m.length; i++){
System.out.println(m[i].toString());
m[i].setAccessible(true);
m[i].invoke(classobject, null);
}

// method.invoke(object);

//call the printIt method
Method method = pluiginClass.getDeclaredMethod("getName", noparams);
method.setAccessible(true);
method.invoke(classobject);


} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


package plugintest;

public class PluginTest implements SimplePlugin {
public String getName() {
return "I'm the plugin!";
}
}

它打印类名和方法名,但不执行该方法。

最佳答案

try block 中的最后一行需要更改为:

System.err.println((String) method.invoke(classobject));

关于java - 使用 URL 类加载器执行 jar 文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39567572/

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