人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: westfish
●カテゴリ:コンピュータ
✍キーワード:BAR Class JAR Java Processing
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kimizu
●5ポイント

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

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

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

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

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

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

◎質問者からの返答

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

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

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


2 ● ksaito11
●100ポイント ベストアンサー

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

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

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

◎質問者からの返答

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

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


3 ● kimizu
●5ポイント

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

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


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

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

◎質問者からの返答

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ