- ベストアンサー
jarファイル内のクラスをインスタンス化する
http://homepage3.nifty.com/satoshis/java/memo.html#extension 上記のサイトを参考に、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 どんな些細なことでもよいので、ご存知の方、ご教授願えないでしょうか。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
インスタンス化しようとしているクラスに引数無しのコンストラクタが定義されていないとかないですか? またはjarファイルにアクセスできなかったり、クラスへのアクセス制限(protectedなど)がかかってるとか・・・
その他の回答 (4)
- PecoPlus
- ベストアンサー率76% (144/188)
#4です。 補則を最後までよく読んでなかったようです。 もう、解決してたんですね。 余分でした。 申し訳ありません。
- PecoPlus
- ベストアンサー率76% (144/188)
こんにちは。 >public class CCCCC { >CCCCC(){} >public void cc(){} >} コンストラクタの修飾子が無指定ですよね。 BBBBBクラスは、jp.co.AAAAAパッケージなので、ここからはインスタンス化はできません。 プラグインにするのならpublic にしないといけないんじゃないでしょうか? public class CCCCC { public CCCCC(){} public void cc(){} }
補足
PecoPlusさん、回等ありがとうございます。 そうなんですよね。 mmitsuさんへの補足にも書いたのですが、ろくにソースを見ないで、「コンストラクタがpublicだ」って書いてしまったために、皆さんを混乱させてしまったみたいです。すみません。
- mmitsu
- ベストアンサー率40% (2/5)
あと、書き忘れましたがなぜJarファイルがあるのに、reflectが必要なケースってどんな時ですか?普通にclasspathに含めてimportじゃダメなんでしょうか? 想像力がなくてすみません(^^;
補足
A.jarに、B.jarの機能を追加したい。 そのときにわざわざA.jarのソースを修正してコンパイルしてjarを作り直して、ということをやりたくないという理由です。 ようはpluginの機能を実現したい、というのが理由です。 何はともあれ、書込みをしてくれたお二人のおかげで解決いたしました。誠にありがとうございました。
- mmitsu
- ベストアンサー率40% (2/5)
CCCCCクラスの宣言はどうなってますか? どうしてもわからなければ、java.lang.Stringクラスなどで試してみてはどうでしょう。
補足
mmitsuさん、回答ありがとうございます。 クラスの宣言は以下のようになっています。 public class CCCCC { CCCCC(){} public void cc(){} } と、ここまで書いて気づいたのですが、コンストラクタがpublicになっていません!!! 昨日Bonjinさんの回答に補足したときは、ソースを見ることができなかったので、憶測で書いてしまいました。 publicにしたら、期待通りの動作をしてくれました。 この場を借りて、Bonjinさん、mmitsuさん、すみませんでした。
補足
書き込み誠にありがとうございます。 引数なしのコンストラクタは定義されています。 また、クラスはpublicです。ちなみにメソッドもpublicです(メンバ変数はありませんです)。 「jarファイルにアクセスできない」というのはどういうことでしょうか?