为了账号安全,请及时绑定邮箱和手机立即绑定

如何从不同的 Java 代码执行 Runnable JAR 的 main 方法?

如何从不同的 Java 代码执行 Runnable JAR 的 main 方法?

杨__羊羊 2023-07-19 17:32:26
我有一个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方法并且不需要特定的实例。


查看完整回答
反对 回复 2023-07-19
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

Runtime runtime = Runtime.getRuntime();

Process process = runtime.exec("java -jar test.jar");


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信