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状態のjavadocとして、

通常、このエラーはコンパイラによってキャッチされます。このエラーは、クラスの定義が非互換に変更された場合にのみ、実行時に発生する可能性があります。

私は間違いなくあなたのクラスパスを見て、それが驚きを持っているかどうかを確認します.

于 2013-01-05T00:23:08.457 に答える
2

Foobar には、以前はvoid methodA(String s). その時点で Foobar を使用するクラスがコンパイルされました。

この using クラスは、methodA のシグネチャを に変更した後に再コンパイルする必要がありますvoid methodA()

これは起こらなかったため、エラーが発生しました。

手がかり: メソッド package.FooBar.methodA([Ljava/lang/String;)V にアクセスしようとしました

これはvoid methodA(java.lang.String)

于 2013-01-05T00:28:01.393 に答える