我有一个test.jar. 这jar只有一个类。它所做的只是删除一个文件夹import java.io.File;public class Test { public static void main(String[] args) { File fileTest = new File("C:\\Users\\...\\test"); fileTest.delete(); }}我需要test.jar从其他java应用程序执行这个外部这就是我尝试过的 ClassLoader pluginLoader = new PluginClassLoader(new URL("file:\\\\C:\\Users\\ . . .\\test.jar")); Class<?> pluginClass = pluginLoader.loadClass("Test"); Plugin plugin = (Plugin) pluginClass.newInstance(); pluginClass.getMethod("main"); // trying to get main method but it throw no such method exception
2 回答
一只斗牛犬
TA贡献1784条经验 获得超2个赞
实现插件架构的正确方法是使用ServiceLoader类。但您的情况似乎要简单得多,因为您的Test类只有一个静态方法。
首先,main类的方法Test是static。这意味着不需要创建实例来调用它,因此您应该删除对pluginClass.newInstance().
其次,Java 中的方法是通过其签名来定义的。 签名由方法名称和方法参数的类型来标识。没有带签名的方法main(),但有带签名的方法main(String[])。
您需要指定您请求的方法的完整签名:
pluginClass.getMethod("main", String[].class);
最后,您可以调用它:
Method main = pluginClass.getMethod("main", String[].class);
main.invoke(null, new Object[] { new String[0] });
第一个参数为main.invokenull,因为它是一个static方法并且不需要特定的实例。
鸿蒙传说
TA贡献1865条经验 获得超7个赞
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("java -jar test.jar");
添加回答
举报
0/150
提交
取消