Java - 调用方法导致 IllegalAccessError

标签 java

我有一个简单的函数,用于从所选目录加载类“Myclass”。

    // Variables
    File temp = new File("some path...");
    String class_name = "MyClass";

    // Directory url
    URL[] urls = null;
    try {
        urls = new URL[]{temp.toURI().toURL()};
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
    // Loading the class
    ClassLoader cl = new URLClassLoader(urls);
    Class clazz = null;
    Object clazz_instance = null;
    try {
        // Loads class
        clazz = cl.loadClass(class_name);
        // Creates instance
        clazz_instance = clazz.newInstance();

        // Invoking method "myMethod"
        try {
            Method m = clazz.getMethod("myMethod");
            m.invoke(clazz_instance);
        } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | NullPointerException e) {
            e.printStackTrace();
        }

    } catch (NoClassDefFoundError | ClassNotFoundException | InstantiationException | IllegalAccessException e) {
        e.printStackTrace();
    }

让我们假设我有以下类(class):

public class MyClass {
    public void myMethod() {
        MyOtherClass moc = new MyOtherClass();
        // ...... some code
    }
}

class MyOtherClass {}

但是当我想调用方法“myMethod”时,我得到:

java.lang.reflect.InvocationTargetException
Caused by: java.lang.IllegalAccessError: tried to access class "MyOtherClass" from class "MyClass"

我假设问题来自于“MyOtherClass”不是公开的(不可能,因为它与“MyClass”在同一个文件中)。

我该如何解决这个问题?

最佳答案

这是因为您没有首先从代码中加载依赖类。将您的 MyOtherClass 放在它自己的文件中并将其设置为公开。然后加载如下。

 cl.loadClass("MyOtherClass");
 cl.loadClass(class_name);

如果您坚持将这两个类放在同一个文件中。定义如下

public class MyClass {
    class MyOtherClass {}
    public void myMethod() {
        MyOtherClass moc = new MyOtherClass();

    }
}

关于Java - 调用方法导致 IllegalAccessError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36063896/

相关文章:

java - 获取java war文件中的资源文件夹

JavaFX TilePane 用户单击的图 block

java - Spring Boot 并行发布 REST 和 SOAP

java - 日历到日期映射

java - Jedis HMSET map 插入顺序

java - Android Studio 提供的 android 应用程序触发错误

java - 使用文件中的字符串创建对象

java - 如何替换 JTextPane 中的 StyledDocument

java - 保存 Android 应用程序状态

java - 如果违反约束,CrudRepository saveAll 方法将引发异常