が、リフレクション使えばもっと簡単に出来そうなことに今更ながら気が付きました。
URL url = NativeLoadTest.class.getResource("jogl_awt.dll");まだAppletでは試していませんが、これならかなり簡単。
File file = new File(url.toURI());
ClassLoader cl = Thread.currentThread().getContextClassLoader();
Field f = ClassLoader.class.getDeclaredField("usr_paths");
f.setAccessible(true);
String[] paths = (String[]) f.get(cl);
String[] paths2 = new String[paths.length + 1];
System.arraycopy(paths, 0, paths2, 0, paths.length);
paths2[paths2.length - 1] = file.getParentFile().getAbsolutePath();
f.set(cl, paths2);
f.setAccessible(false);
System.loadLibrary("jogl_awt");
もちろんセキュリティーは無視するとして。
ClassLoaderの実装依存(フィールド名が変わったらダメ)なのが問題点ですが、今更変わるものでもないでしょう。
ということで、近々NativeCapableフレームワーク更新します。
SunがApplet Launcherというものを公開しているのを最近知りました。
Java Web StartのApplet適用っていう感じです。
Sunが署名しているため、安心して使うことが出来ます。
メジャーなネイティブライブラリ(JOGLやJava3Dなど)を使う場合はこれを使うのがよさそうです。
(ライブラリ側で対応しておかないといけないのが難点ですが)
時間があれば使ってみて感想を書きたいと思います。
0 件のコメント:
コメントを投稿