модуль java.base не «открывает java.lang.reflect» для модуля com.jfoenix

#gradle #javafx #jfoenix #module-info #jpackage

Вопрос:

Прежде чем начать описывать, как я получаю эту ошибку, вот несколько важных сведений:

  1. Крайне важно использовать module-info.java в моем проекте, так как jpackage не будет работать без его использования.
  2. Я использую SDK 14.0.2 (это минимальная версия, которая позволяет использовать пакет).
  3. Каждый комментарий будет оценен по достоинству; хотя, если вы собираетесь прокомментировать что-то, связанное с использованием определенного аргумента виртуальной машины, я прошу вас нажать ctrl F, чтобы проверить, использую ли я уже аргумент, который вы собираетесь предложить, поскольку в моей сборке есть куча аргументов виртуальной машины.-

Хорошо, давайте посмотрим на мою проблему:

Во-первых, сосредоточьтесь на приведенном ниже аргументе виртуальной машины:

 "--add-opens=java.base/java.lang.reflect=com.jfoenix",
 

Если я не использую этот аргумент, при запуске программы появляется следующая ошибка:

 java.lang.reflect.InaccessibleObjectException: Unable to make boolean java.lang.reflect.AccessibleObject.setAccessible0(boolean) 
accessible: module java.base does not "opens java.lang.reflect" to module com.jfoenix
 

ВАЖНО -> Вот как отображается мое представление без использования упомянутого аргумента виртуальной машины (назовем его изображением 1):
https://snipboard.io/QJ5Fdc.jpg

«Хорошо, так почему бы тебе просто не использовать аргумент виртуальной машины?» Отличный вопрос! Хорошо, давайте добавим это в мои аргументы виртуальной машины и запустим программу еще раз.

После этого вот как выглядит мой взгляд прямо сейчас (давайте назовем его изображением 2): https://snipboard.io/fbhGxw.jpg

Отлично! Это именно то, каким должно быть мое мнение (обратите внимание, что, учитывая, что оно сработало так, как ожидалось, на этот раз у меня нет ошибок).

Итак, когда все работает, я наконец-то могу двигаться дальше и выполнить свою задачу по сортировке jpackage. После этого все перестает иметь смысл, так как после выполнения моей программы через файл .exe (сгенерированный jpackage) мое представление выглядит как представление «изображение 1», независимо от того, что мой проект работает правильно, когда я запускаю его с помощью задачи «выполнить».

Есть какие-нибудь мысли о том, почему это происходит? (Я предполагаю, что мой module-info.java является ключом к ее решению, так как каждый раз, когда я удаляю оператор «открывается», например: «открывается my.package.name в javafx.fxml», программа выдает мне почти такую же ошибку).

Дайте мне знать, понадобятся ли какие-либо образцы кода. Мы будем признательны за любую помощь. Спасибо!

изменить: связанная проблема с GitHub: введите описание ссылки здесь

Ответ №1:

Я не знаю, как работает задача сортировки jpackage, я использую инструмент jpackage внутри jdk через консоль, и я использовал эти аргументы при создании пакета

 --java-options "--add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker=javafx.fxml --add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.colorpicker=javafx.fxml"
 

Там я открыл палитру красок из набора для создания сцен в javafx.fxml
Как вы можете видеть, мне пришлось открыть два пакета (на самом деле их было пять, но это слишком много, чтобы помещать сюда), и вы должны указать --add-opens , чтобы каждый пакет открывался

Я помещаю код y, используемый для упаковки приложения с помощью jpackage

 jpackage.exe 
    --module-path 
        .;D:buildsikonlibrowsertargetikonlibrowser.jar;
        D:buildsikonlibrowserlibsiconsikonli-antdesignicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-bootstrapicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-boxicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-bpmn-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-captainicon-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-carbonicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-codicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-coreui-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-dashicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-devicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-elusive-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-entypo-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-evaicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-feather-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fileicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fluentui-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fontawesome-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fontawesome5-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-fontelico-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-foundation-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-hawcons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-icomoon-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-ionicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-ionicons4-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-jamicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-ligaturesymbols-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-lineawesome-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-linecons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-maki-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-maki2-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-mapicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-material-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-material2-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-materialdesign-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-materialdesign2-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-medicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-metrizeicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-microns-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-ociicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-octicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-openiconic-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-paymentfont-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-prestashopicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-remixicon-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-runestroicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-simpleicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-simplelineicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-subway-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-themify-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-typicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-unicons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-weathericons-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-websymbols-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-whhg-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-win10-pack-12.2.0.jar
D:buildsikonlibrowserlibsiconsikonli-zondicons-pack-12.2.0.jar
        D:buildsikonlibrowserlibsscenebuilder-kit-16.0.0.jar;
        D:buildsikonlibrowserlibsjfoenix-9.0.10.jar
        D:buildsikonlibrowserlibsikonli-core-12.2.0.jar;
        D:buildsikonlibrowserlibsikonli-javafx-12.2.0.jar
    --module jcc.app.ikonlibrowser/jcc.app.ikonlibrowser.Main 
    --name "Ikonli Browser" -d D:buildsikonlibrowser
    --win-dir-chooser 
    --input D:buildsikonlibrowserapp
    --vendor jCC 
    --app-version "1.0.0"
    --java-options 
        "--add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker=javafx.fxml
        --add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.colorpicker=javafx.fxml
        --add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.rotator=javafx.fxml
        --add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.slider=javafx.fxml
        --add-opens com.gluonhq.scenebuilder.kit/com.oracle.javafx.scenebuilder.kit.util.control.paintpicker.gradientpicker=javafx.fxml"
 

Конечно, это всего лишь одна строка.
Теперь я объясню это шаг за шагом:
--module-path Этот аргумент используется для указания пути для всех модулей, используемых вашим приложением. Включая приложение .jar
--module Этот аргумент указывает основной класс приложения. Сначала укажите имя модуля, а затем полное имя класса.
--name Это делается для указания имени приложения.
-d Указывает путь вывода.
--win-dir-chooser Позволяет выбрать путь установки при установке упакованного приложения
--input Указывает папку, содержащую внешние ресурсы для вашего приложения
--vendor Имя продавца. Может быть, твое имя
--app-version Версия вашего приложения
--java-options Параметры jvm

Я надеюсь, что это сработает для вас, извините за задержку.

Комментарии:

1. Sorry for the late response, I was trying to find a way to implement your comment in my environment, just found a way to do that right now! What makes your comment interesting is the fact that it gives me some hope to run jpackage with the following VM argument: "--add-opens=java.base/java.lang.reflect=com.jfoenix" If that works, jpackage would be able to build my application successfully. Can you post your step-by-step showing how you use VM arguments in the console in order to create your package? Also, any guide, video, document, link, used by you would be appreciated! thx!

2. извините, чувак, видео нет, на веб-сайте oracle вы можете найти документацию об этом, но так как я кубинец, я не могу получить туда доступ

3. это может вам немного помочь alvinalexander.com/java/…