Не удается найти файл .dylib после изменения `java.library.path` - PullRequest
0 голосов
/ 22 января 2019

Я создал файл .dylib, который хочу загрузить с использованием JNI, и я не могу заставить программу Java найти его.

Я программно проверил значение java.library.path, и оно было:

/Users/potato/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.

Когда я поместил мой .dylib файл в одну из этих папок, моя Java-программа без проблем обнаружила и загрузила файл .dylib, но когда я попытался изменить java.library.path, включив в него путь к папке на рабочем столе, и поместил файл .dylib на моем рабочем столе, программа не может его найти.

System.setProperty("java.library.path", "/Users/potato/Desktop:" + System.getProperty("java.library.path"));
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("winfnc");

output:
/Users/potato/Desktop:/Users/potato/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no winfnc in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)

Есть идеи, что я делаю не так? Есть ли способ заставить программу найти файл .dylib в любой папке, которую я хочу, или, что еще лучше, в своем собственном файле .jar и успешно загрузить его?

РЕДАКТИРОВАТЬ: один ответ предлагает решение, которое использует командную строку, но я хотел бы иметь возможность запустить приложение, дважды щелкнув исполняемый файл .jar и не нужно беспокоиться о каких-либо технические формальности.

Существует возможность добавить аргументы VM в Eclipse, но они используются только при запуске программы из Eclipse, а не при непосредственном открытии исполняемого файла .jar.

1 Ответ

0 голосов
/ 22 января 2019

java.library.path нельзя изменить изнутри программы. Вы можете установить свойство, но его значение используется только при запуске виртуальной машины и больше не будет прочитано. Вы должны установить его с помощью -D

Смотрите также мой ответ здесь: https://stackoverflow.com/a/51304696/2543253

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...