1. ホーム
  2. java

[解決済み] java.lang.IllegalAccessError: メソッドにアクセスしようとしました。

2023-06-10 23:13:08

質問

例外が発生し、その原因がわかりません。

私が受け取った例外は:

java.lang.IllegalAccessError: クラスBからメソッドConnected.getData(Ljava/lang/String;)Ljava/sql/ResultSet;にアクセスしようとした。

このメソッドは公開されています。

public class B
{
  public void myMethod()
  {
   Connected conn = new Connected();  // create a connected class in order to connect to The DB 
   ResultSet rs = null;  // create a result set to get the query result
   rs = conn.getData(sql); // do sql query
  }
}

public class Connected 
{
 public ResultSet getData(String sql) 
{
  ResultSet rs = null;
  try 
  {
     prepareConnection();
     stmt = conn.createStatement();
     stmt.execute(sql);
     rs = stmt.getResultSet();
  }
  catch (SQLException E) 
      {
    System.out.println("Content.getData Error");
    E.printStackTrace();
       }
return rs;
}

私は、apache tomcat 5.5.12 を使用しています。 とJAVA 1.6を使用しています。

どのように解決するのですか?

ほぼ間違いなく、期待するものとは異なるバージョンのクラスを実行時に使用しているはずです。 特に、実行時のクラスは、あなたがコンパイルしたものとは異なるでしょう (さもなければ、これはコンパイル時のエラーを引き起こしたでしょう) - そのメソッドは これまで であった private ? 古いバージョンのクラス/jarがどこかに残っていませんか?

のjavadocsのように IllegalAccessError の状態になります。

通常、このエラーはコンパイラによって捕捉されます。このエラーは、クラスの定義が非互換に変更された場合にのみ、実行時に発生します。

クラスパスを見て、何か驚くようなものがあるかどうか、間違いなくチェックします。