Укажите путь Dll к System.loadLibrary при экспорте - PullRequest
2 голосов
/ 29 сентября 2011

Я хочу экспортировать свое Java-приложение, которое использует интерфейс JNI и загружает Dll через System.loadLibrary ("dllName");

a) Файл Dll присутствует как в папке Java Project, так и вC диск, одно из мест, где JVM будет искать DLL во время выполнения.

Проблема: Когда я экспортирую этот проект в виде Jar-файла и передаю его клиенту, клиент должен иметь возможность запускать инструмент без проблем с вводом файла Dll.Я не могу думать об этом альтернативным способом;предоставить абсолютный путь с помощью System.load ("путь: \");потому что я не знаю, куда пользователь будет загружать файл Jar.Не могли бы вы помочь мне в этом.Большое спасибо.

Ответы [ 3 ]

1 голос
/ 29 сентября 2011

Вам нужно поместить DLL в тот же путь, что и приложение, в системный путь или добавить его путь к переменной PATH перед запуском приложения.

0 голосов
/ 30 сентября 2011

Посмотрите на Runtime.load .

Загружает указанное имя файла в виде динамической библиотеки.Аргумент имени файла должен быть полным путем.Из java_g он автоматически вставит "_g" перед ".so" (например, Runtime.getRuntime (). Load ("/ home / avh / lib / libX11.so");).

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

Это похоже на метод loadLibrary (String), но он принимает общее имя файла в качестве аргумента, а не просто имя библиотеки, позволяя любому файлу собственного кода бытьзагружен.

Метод System.load (String) является обычным и удобным средством вызова этого метода.

0 голосов
/ 29 сентября 2011

Следующий фрагмент загрузит DLL независимо от рабочего каталога, если он находится в том же каталоге, что и файл JAR:

CodeSource codeSource = MainClass.class.getProtectionDomain().getCodeSource();
File jarFile = new File(codeSource.getLocation().toURI().getPath());
File parentDir = jarFile.getParentFile();
File dllFile = new File(parentDir, "my.dll");
System.load(dllFile.getPath());
...