Сконфигурировать OpenJFX 11 для извлечения его DLL в другой указанный пользователем каталог? - PullRequest
0 голосов
/ 20 ноября 2018

Есть ли способ настроить OpenJFX 11 для извлечения их DLL в другой указанный пользователем каталог?

При попытке перенести существующий проект Java 10 / Maven на Java 11, я попытался использовать OpenJDK 11. Чтобы заставить сборку кода работать, мне нужно было добавить JAR-файлы JavaFX в файлы конфигурации Maven pom.xml (поскольку JavaFX больше не является встроенной частью Java 11).

Однако во время выполнения я обнаружил ошибки из-за того, что OpenJFX извлекал DLL-файлы в каталог пользователя, а затем имел ошибки доступа (см. Ошибки ниже). В течение многих лет у меня было много проектов, в которых возникали ошибки при работе с каталогами C: \ Users * (из-за того, что Microsoft Windows вмешивалась в блокировки файлов и права доступа к каталогам, антивирусное сканирование и т. Д.), Поэтому я стараюсь избегать этих каталогов всякий раз, когда возможный. Проект Java работает должным образом под Java 10 в Windows 7 и в RedHat 7, что, по-видимому, подразумевает, что JAR-файлы OracleFF для JavaFX 10 не извлекают библиотеки DLL в каталоги C: \ Users *. Похоже, у OpenJFX нет проблем с записью библиотек DLL в эти каталоги, но впоследствии он не может читать те же файлы.

Я использую 64-разрядную версию Microsoft Windows 7 Professional с пакетом обновления 1. Я еще не пробовал работать в Linux с OpenJDK 11 и OpenJFX, но я полагаю, что OpenJFX попытается извлечь свои библиотеки DLL на этой платформе как хорошо.

Пример ошибок Java во время выполнения, вызванных OpenJFX:

Loading library prism_d3d from resource failed: java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_d3d.dll: Access is denied

java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_d3d.dll: Access is denied

Loading library prism_sw from resource failed: java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_sw.dll: Access is denied

java.lang.UnsatisfiedLinkError: C:\Users\MyUserName\.openjfx\cache\11\prism_sw.dll: Access is denied

Graphics Device initialization failed for : d3d, sw

Error initializing QuantumRenderer: no suitable pipeline found

java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found

1 Ответ

0 голосов
/ 09 мая 2019

Резюме предыдущего обсуждения и связанные ресурсы

Начиная с OpenJFX 12, вы можете использовать системное свойство javafx.cachedir, чтобы сообщить OpenJFX, где извлечь его собственные библиотеки. Позаботьтесь о , а не , чтобы использовать понятие «верблюжий случай» в части «cache D ir» системного свойства (как в предыдущих комментариях и в комментариях к запросу-запросу).

Подробнее см. Запрос на извлечение .

В версиях, предшествующих 12, OpenJFX извлекает собственные библиотеки по фиксированному пути на основе user.home (System.getProperty("user.home") + "/.openjfx/cache/" + jfxVersion).

Существует два способа изменить путь, который OpenJFX будет использовать в качестве расположения кеша

  1. Предоставьте собственные библиотеки и сохраните их в произвольном месте. Затем используйте системное свойство java.library.path, чтобы сообщить OpenJFX загружать его из вашего пользовательского местоположения (это позволит избежать извлечения в фиксированное местоположение кэша).
  2. Изменить user.home, чтобы изменить расположение кэша.

Подробнее см. Код .

...