- - 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