gpt4 book ai didi

Java - 调用方法导致 IllegalAccessError

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:31:48 25 4
gpt4 key购买 nike

我有一个简单的函数,用于从所选目录加载类“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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com