猿问

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

我有一个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 


杨__羊羊
浏览 103回答 2
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方法并且不需要特定的实例。

鸿蒙传说

Runtime runtime = Runtime.getRuntime();Process process = runtime.exec("java -jar test.jar");
随时随地看视频慕课网APP

相关分类

Java
我要回答