実行時にネイティブライブラリの新しいパスを追加することは可能ですか? (Javaをプロパティjava.library.pathで起動する代わりに)System.loadLibrary(nativeLibraryName)
を呼び出すと、nativeLibraryName
を検索しようとするとそのパスが含まれます。 JVMの起動後にこれらのパスをフリーズできますか?実行時にネイティブライブラリの新しいパスをJavaで追加する
5
A
答えて
19
それは少しハッキングなしには不可能と思われる(すなわち、ClassLoaderクラスのプライベートフィールドにアクセス)
これblogはそれを行うための2つの方法を提供します。
記録のために、ここに短いバージョンがあります。
オプション1:現在java.library.pathに
/**
* Adds the specified path to the java library path
*
* @param pathToAdd the path to add
* @throws Exception
*/
public static void addLibraryPath(String pathToAdd) throws Exception{
final Field usrPathsField = ClassLoader.class.getDeclaredField("usr_paths");
usrPathsField.setAccessible(true);
//get array of paths
final String[] paths = (String[])usrPathsField.get(null);
//check if the path to add is already present
for(String path : paths) {
if(path.equals(pathToAdd)) {
return;
}
}
//add the new path
final String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
newPaths[newPaths.length-1] = pathToAdd;
usrPathsField.set(null, newPaths);
}
に新たなパスを追加:は完全
public static void setLibraryPath(String path) throws Exception {
System.setProperty("java.library.path", path);
//set sys_paths to null so that java.library.path will be reevalueted next time it is needed
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
}
オプション2)は新しい値でjava.library.pathにを置き換えます
関連する問題
- 1. 実行時にJavaで新しいクラスを拡張または追加する
- 2. Java - プロパティ:実行時に新しいキーをプロパティファイルに追加しますか?
- 3. 実行時に新しい列を追加する
- 4. 動的に実行時に新しいメソッドとプロパティを追加
- 5. asp.netの実行時に新しいパネルを追加するには
- 6. 私のJavaプログラムで実行時間を追加する
- 7. 実行時にアンドロイドアプリに新しいフィールドを追加する方法
- 8. ExtJS:実行時にMenuインスタンスに新しいMenuItemを追加する
- 9. APKにネイティブライブラリを追加
- 10. 実行時にテーブルに行を追加
- 11. 実行時にコントロールを追加すると動作しない
- 12. 実行時にファイルをアプリケーションに追加
- 13. 実行時に新しい列を追加するにはどうすればよいですか?
- 14. 検索パスに新しい位置を追加する方法
- 15. Javaの実行時にjpanelフォームをjpanelに追加するには?
- 16. アイデアで実行時の依存関係にJavaライブラリが追加されない
- 17. onclickを追加したり、実行時にデータベースから実行時に作成
- 18. Java:実行時に型の新しい実装を作成しますか?
- 19. 実行時に動的にグリッドビューに行を追加する
- 20. 実行時にストリップメニューに追加
- 21. javaの既存のテキストファイルに新しい行を追加するには?
- 22. クラスにインターフェイスをプログラムで(実行時に)追加する方法
- 23. 実行時にEclipse Java EEがCSSファイルを更新しない
- 24. 実行時にweb.configにHttpHandlerの登録を追加します。
- 25. アクセステーブルに新しい行を追加
- 26. railsテーブルに新しい行を追加
- 27. 実行時にカスタムコンポーネントをプログラムで追加する
- 28. iOS5で実行時にJSONファイルを追加/編集する
- 29. 実行時にpdfに必要な場合にのみ新しいページを追加するC#
- 30. 実行時にC#のフォームにパネルを追加する
http://stackoverflow.com/questions/2899804/setting-classpath-during-runtime –