JavaのClassLoaderを用いてクラスをロードするさいにClassNotFoundExceptionが起きてしまう原因には何があるでしょうか。

System.setProperty("java.class.path", path);で目的のクラスが入っているjarファイルはクラスパスに追加してあり、「*sys-package-mgr*: processing new jar,…」というメッセージが出ることは確認しました。またJarの中にはデフォルトパッケージに入っているクラスと、org.foo.bar.bazに入っているクラスがあるのですがどちらもClassNotFoundExceptionになってしまいます。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2006/06/19 15:19:59
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ksaito11 No.2

回答回数44ベストアンサー獲得回数4

ポイント100pt

System.getProperty("java.class.path", "[新しいクラスパス]")を設定することでクラスパスが変更されるということはないと思います。

下記に同じような質問が出されていますが、ClassLoaderを自作して解決したようです。

http://java-house.jp/ml/archive/j-h-b/025652.html

id:westfish

setPropertyを使ってjava.class.pathプロパティの値を変更してもクラスパスは変更されないようですね。盲点でした。新しいClassLoaderインスタンスを作成する方針で試してみます。

追伸:ClassLoaderをextendsして新しいクラスローダを作成しました。うまく動いているようです。ありがとうございました。

2006/06/19 15:01:42

その他の回答2件)

id:kimizu No.1

回答回数726ベストアンサー獲得回数21

ポイント5pt

http://www.smg.co.jp/seminar/techsquare/javassist03.html

http://www2t.biglobe.ne.jp/~o_kiku/dynamicloader/

まずは、チャッチしてみるのも手かもしれませんが、

CLASSPATHのつづりが間違っている、とかないですよねw。

昔、CLASS_PATHに一生懸命定義して、失敗してたことがありました。

正しくはCLASSPATHですね。アンダースコア無し。

id:westfish

チャッチとはなんでしょうか?どちらのページにも書かれていないようですが。

またCLASSPATHの綴りは今回は間違える余地がありません。System.setPropertyを使っていますので。

あと、getClassLoader()で自分を読み込んだクラスローダを取得して、それを使って動的ロードしようとしているので、クラスローダが食い違うことが原因で例外が投げられたとも考えにくいと思います。

2006/06/16 17:52:06
id:ksaito11 No.2

回答回数44ベストアンサー獲得回数4ここでベストアンサー

ポイント100pt

System.getProperty("java.class.path", "[新しいクラスパス]")を設定することでクラスパスが変更されるということはないと思います。

下記に同じような質問が出されていますが、ClassLoaderを自作して解決したようです。

http://java-house.jp/ml/archive/j-h-b/025652.html

id:westfish

setPropertyを使ってjava.class.pathプロパティの値を変更してもクラスパスは変更されないようですね。盲点でした。新しいClassLoaderインスタンスを作成する方針で試してみます。

追伸:ClassLoaderをextendsして新しいクラスローダを作成しました。うまく動いているようです。ありがとうございました。

2006/06/19 15:01:42
id:kimizu No.3

回答回数726ベストアンサー獲得回数21

ポイント5pt

http://www.nulab.co.jp/designPatterns/designPatterns4/designPatt...

すみません。「キャッチ」ですorz


エラー発生時に環境変数やパラメタの内容を確認してみるのが

解決の近道かもしれません。

id:westfish

kimizuさんはEclipseを使っておられないのでしょうか?CLASSPATHの綴りを間違えたり、例外をキャッチしてe.printStackTrace()しなかったりは、する方が難しいかと思います…。

ご回答ありがとうございました。

2006/06/19 15:04:32

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません