Я использую JNI, чтобы обернуть несколько встроенных функций в закрытый исходный код Библиотека PDF .Он имеет зависимый каталог fonts
, который должен находиться в подпапке каталога вызывающего приложения .По моему опыту, поиск стандартен на основе текущего рабочего каталога .Таким образом, проблема.
При загрузке кода JNI в приложение Java текущий рабочий каталог является правильным.Тем не менее, каталог вызывающего приложения является каталогом java.exe
bin.Я проверил, что помещение зависимой папки fonts
в папку C:\Program Files (x86)\Java\jre6\bin
работает как положено.
Библиотека, похоже, использует вызов C ++ GetCommandLine()
или что-то подобное, чтобы определить, где должен находиться каталог fonts.Очевидно, это неприемлемое решение.
Я бы хотел избежать вызова внешнего EXE-файла.Но единственные обходные пути, которые я нашел, это:
- Скомпилируйте EXE, поместите в каталог проекта Java и используйте Java
Runtime.exec()
для выполнения.(это работает работает) - Заставляет JNI-код запускать отдельный процесс, который выполняет те же действия, что и выше (не получает ничего, кроме усложнения)Я могу обойти эту проблему?Когда Java-приложения скомпилированы как исполняемый JAR-файл, является ли полученная командная строка все еще в JRE
C:\Program Files\...java.exe
?