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

标签 java jar

我正在编写一个动态加载 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/

相关文章:

java - 为什么这个程序在MYSQL中可以运行,但在Java中却不能运行?

java - 使用来自 Java 的编号文件描述符

ubuntu - 在 Ubuntu 中停止可执行 JAR 的 Shell 脚本

java - 日历类和更改时区冲突

java - 运行具有 200 个节点的 Selenium Grid 2。如何增加 Jetty 线程数?

java - 应用程序无法在 GAE 上运行

java - 获取应用启动路径

java - JBoss不同的lib目录

Java:Runtime.exec() 只能通过控制台工作

java - 命令提示符 - jar 文件