0

我有一堂课

public Class Foobar{
     public void methodA();
}

现在我在另一个类中有一个方法

public static final void callFooBar(){
   Foobar foobar = new Foobar();
   foobar.methodA(); <-- error here
}

Error: Exception in thread "main" java.lang.IllegalAccessError: tried to access method package.FooBar.methodA([Ljava/lang/String;)V from class package.mainclass

任何建议(对不起这里的新手)

4

2 回答 2

5

首先,区分大小写。FooBar()当您的班级被命名时,您的错误状态Foobar()

也许您在运行时使用了与您期望的不同版本的类。特别是,运行时类将与您编译的类不同(否则这会导致编译时错误) - 该方法曾经是私有的吗?您的系统上是否有旧版本的类/jar?

作为IllegalAccessError状态的 javadocs,

通常,这个错误会被编译器捕获;如果类的定义发生了不兼容的更改,则此错误只会在运行时发生。

我肯定会查看您的类路径并检查它是否有任何惊喜。

于 2013-01-05T00:23:08.457 回答
2

Foobar 以前有一个void methodA(String s). 当时编译了Foobar using class。

这个 using 类应该在将 methodA 的签名更改为 后重新编译void methodA()

这没有发生,因此错误。

线索:试图访问方法 package.FooBar.methodA([Ljava/lang/String;)V

这是void methodA(java.lang.String)

于 2013-01-05T00:28:01.393 回答