性格いい人が優勝

http://homepage3.nifty.com/satoshis/java/memo.ht …

上記のサイトを参考に、jarファイル内のクラスをインスタンス化しようとしているのですが、
clazz.newInstance();
を実行しようとすると、以下のようなエラーが発生します。

java.lang.IllegalAccessException: Class jp.co.AAAAA.BBBBB can not access a member of class CCCCC with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:57)
at java.lang.Class.newInstance0(Class.java:302)
at java.lang.Class.newInstance(Class.java:261)
at jp.co.loft.LogCut.main(LogCut.java:58)

※jp.co.AAAAA.BBBBB は実行クラス、CCCCCはjarファイル内のクラスです。

開発環境は、以下です。
eclipse2.1.1 + jdk1.5.0_02

どんな些細なことでもよいので、ご存知の方、ご教授願えないでしょうか。
よろしくお願いいたします。

A 回答 (5件)

インスタンス化しようとしているクラスに引数無しのコンストラクタが定義されていないとかないですか?


またはjarファイルにアクセスできなかったり、クラスへのアクセス制限(protectedなど)がかかってるとか・・・

この回答への補足

書き込み誠にありがとうございます。

引数なしのコンストラクタは定義されています。
また、クラスはpublicです。ちなみにメソッドもpublicです(メンバ変数はありませんです)。
「jarファイルにアクセスできない」というのはどういうことでしょうか?

補足日時:2005/07/26 00:06
    • good
    • 0

 #4です。



 補則を最後までよく読んでなかったようです。
 もう、解決してたんですね。
 余分でした。
 申し訳ありません。
    • good
    • 0

 こんにちは。



>public class CCCCC {
>CCCCC(){}
>public void cc(){}
>}

 コンストラクタの修飾子が無指定ですよね。
 BBBBBクラスは、jp.co.AAAAAパッケージなので、ここからはインスタンス化はできません。
 プラグインにするのならpublic にしないといけないんじゃないでしょうか?

public class CCCCC {
  public CCCCC(){}
  public void cc(){}
}

この回答への補足

PecoPlusさん、回等ありがとうございます。

そうなんですよね。
mmitsuさんへの補足にも書いたのですが、ろくにソースを見ないで、「コンストラクタがpublicだ」って書いてしまったために、皆さんを混乱させてしまったみたいです。すみません。

補足日時:2005/07/26 12:30
    • good
    • 0

あと、書き忘れましたがなぜJarファイルがあるのに、reflectが必要なケースってどんな時ですか?普通にclasspathに含めてimportじゃダメなんでしょうか?


想像力がなくてすみません(^^;

この回答への補足

A.jarに、B.jarの機能を追加したい。
そのときにわざわざA.jarのソースを修正してコンパイルしてjarを作り直して、ということをやりたくないという理由です。
ようはpluginの機能を実現したい、というのが理由です。

何はともあれ、書込みをしてくれたお二人のおかげで解決いたしました。誠にありがとうございました。

補足日時:2005/07/26 09:51
    • good
    • 0

CCCCCクラスの宣言はどうなってますか?


どうしてもわからなければ、java.lang.Stringクラスなどで試してみてはどうでしょう。

この回答への補足

mmitsuさん、回答ありがとうございます。
クラスの宣言は以下のようになっています。

public class CCCCC {
CCCCC(){}
public void cc(){}
}

と、ここまで書いて気づいたのですが、コンストラクタがpublicになっていません!!!
昨日Bonjinさんの回答に補足したときは、ソースを見ることができなかったので、憶測で書いてしまいました。
publicにしたら、期待通りの動作をしてくれました。
この場を借りて、Bonjinさん、mmitsuさん、すみませんでした。

補足日時:2005/07/26 09:46
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!