- - PR -
 
読み込まれたlibraryの名前を調べるには?
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
  | 
 投稿日時: 2006-12-01 09:45 
System.loadLibrary()メソッドですでに読み込まれているlibraryの名前を調べる方法はあるのでしょうか?
 | ||||||||
  | 
 投稿日時: 2006-12-01 12:58 
ヒロシマケンさん、こんにちは。
そのための APIは無いと思います。 沢山のメッセージを受け取ることになるかもしれませんが、VM起動時の オプションで -verbose:jni をつけるとヒントが得られるかも知れません。 あと、リフレクションの使用が許されるなら、実装に依存しますが、 下記のコードで表示できるかも知れません。 
 Sunの JDK 1.5.0 Windows版では何か(zip.dll)を表示しましたが、 漏れなく表示したかはわかりません。参考です。 [ メッセージ編集済み 編集者: Kissinger 編集日時 2006-12-01 13:02 ]  | ||||||||
  | 
 投稿日時: 2006-12-01 21:38 
Kissingerさん
返信ありがとうございます。試してみた所、時分の環境では Vector v = (Vector)field.get(loader); の所でエラーが出てしまいました(JDK 1.5/WIndows XP)。 java.lang.ClassCastException: java.lang.Boolean .... ちなみに Field [] fields = cls.getDeclaredFields(); にすると20個のフィールドが時分の環境ではでました。空ではないようなのですが、、、。何か策がありますでしょうか?  | ||||||||
  | 
 投稿日時: 2006-12-01 22:43 
>Kissingerさん
細かい突っ込みで申し訳ないですが、 ClassLoader#loadedLibraryNamesはstaticなので、 Field#get(Object)の引数はnullでOKですよ。  | ||||||||
  | 
 投稿日時: 2006-12-01 23:30 
 で、何と出ますか? sun.misc.Launcher.AppClassLoader だったら、Kissingerさんのやり方でできるはずですが。  | ||||||||
  | 
 投稿日時: 2006-12-04 12:47 
おお!
かつのりさんのとおり、 staticでした。 つっこみありがとう。 java.lang.Booleanというのはまだ理解できません。 時間のあるときに調べてみますが、わかるかどうか…  | ||||||||
  | 
 投稿日時: 2006-12-05 01:26 
はじめまして。
私の見当違いだったらすみません。 
 もしかして以下のようなコードになっているのでしょうか? 
 だとすると fields[0] には ClassLoader.class の initialized という boolean 値のフィールドが入っているので java.lang.ClassCastException: java.lang.Boolean が起きるのは納得できるのですが・・・ 追記: ソースコードに field.setAccessible(true); を忘れてました [ メッセージ編集済み 編集者: Jaune 編集日時 2006-12-16 02:08 ]  | ||||||||
1
