有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java调用文件中的方法

我的电脑上有JAR文件, 现在我想在这个jar文件中调用一个方法。但是我不明白是怎么回事(我犯了错误,我肯定我做错了什么),谢谢你的建议

File file == new File("MyLocation");

Class loadClass = Class.forName("myClass", true, file.getClass().getClassLoader());
Method m = loadClass.getMethod("myMethod", Integer.class);
m.setAccessible(true);
m.invoke(loadClass.newInstance(), 1);
m.setAccessible(false);


共 (1) 个答案

  1. # 1 楼答案

    file.getClass()

    这让你得到了类java.io.File

    file.getClass().getClassLoader()

    这就得到了java.io.File的类加载器,它是知道如何加载java核心类的引导类加载器。这个类加载器与MyLocation没有任何关系,不能用于从磁盘加载java核心类以外的任何内容

    然后,你的代码中有很多错误:

    • cl.newInstance()已弃用,不应使用
    • 加载默认包中的类(即,它没有包)通常不起作用;API的设计并不是为了让你做到这一点。所以,不要
    • 你的方法对象有一个单独的可访问标志;设置后无需禁用此功能
    • getMethod不获取私有方法;要么你用它找到的方法一开始就不需要被访问(因为它是public),要么如果它不是公共的,你需要getDeclaredMethod
    • 您的方法接受1个“整数”类型的参数?我很怀疑这一点。你是说int.class

    试试这个:

    File jar = new File("/path/to/myjar.jar");
    try (ClassLoader cl = new URLClassLoader(new URL[] {jar.toURI().toURL()})) {
      Class<?> myClass = cl.loadClass("com.foo.MyClassFromTheJar");
      Object instance = myClass.getConstructor().newInstance();
      Method m = myClass.getDeclaredMethod("myMethod", int.class);
      m.invoke(instance, 1);
    }