Модульное приложение JavaFX, java.lang.module.FindException: модуль javafx.controls не найден (Java 11, Intellij)

У меня проблема с моим модульным приложением JavaFX. Я создал проект JavaFX и добавил, что модули JavaFX lib и JavaFX распознаются. Тем не менее, я продолжаю получать эти сообщения об ошибках:

Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found

Изображение для полной настройки прилагается:

редактировать:

это все сообщения об ошибках:

/usr/lib/jvm/java-1.11.0-openjdk-amd64/bin/java -Djava.library.path=
/home/thenekolite/Documents/JavaTools/javafx-sdk-11.0.1/lib --module-
-path=~/Documents/JavaTools/javafx-sdk-11.0.1/lib 
--add-modules=javafx.controls,javafx.fxml
--add-modules javafx.base,javafx.graphics --add-reads
-javaagent:/home/thenekolite/idea-IU-183.4588.61/
lib/idea_rt.jar=35937:/home/thenekolite/idea-IU-183.4588.61/bin
-Dfile.encoding=UTF-8 -classpath /home/thenekolite/IdeaProjects/
Latihan1/out/production/Latihan1:/home thenekolite/Documents/JavaTools/
javafx-sdk-11.0.1/lib/src.zip:/home/thenekolite/Documents/JavaTools/
javafx-sdk-11.0.1/lib/javafx-swt.jar:/homehome/thenekolite/Documents
/JavaTools/javafx-sdk-11.0.1/lib/javafx.fxml.jar:/home/thenekolite/
Documents/JavaTools/javafx-sdk-11.0.1/libjavafx.media.jar:
/home/thenekolite/Documents/JavaTools/javafx-sdk-11.0.1/lib/
/javafx.swing.jar:/home/thenekolite/Documents/JavaTools/javafx
sdk-11.0.1/lib/javafx.controls.jar:/home/thenekolite/
Documents/JavaTools/javafx-sdk-11.0.1/lib/javafx.graphics.jar
-p /home/thenekolite/Documents/JavaTools/javafx-sdk-11.0.1/lib/
/javafx.base.jar:/home/thenekolite/Documents/
JavaTools/javafx-sdk-11.0.1/lib/javafx.graphics.jar sample.Main

Error occurred during initialization of boot layer
java.lang.module.FindException: Module javafx.controls not found

Я также добавляю опции vm:

но все же я получил это сообщение об ошибке.

4 ответа

Поскольку вы работаете как немодульное приложение от IntelliJ, вам необходимо убедиться, что вы добавили аргумент VM следующим образом:

--module-path /path/to/javafx-sdk-11.0.1/lib --add-modules=javafx.controls,javafx.fxml

Вы можете перейти по ссылке на документацию как JavaFX и IntelliJ, а затем немодульно из IDE для получения полной информации о настройке.

У меня была такая же проблема с netbeans, я правильно добавил параметры виртуальной машины, но я получил эту ошибку, решение для моего случая состояло в том, чтобы отключить компиляцию при сохранении из свойств проекта -> Сборка -> Компиляция

Надеюсь, это поможет вам в intellij или кому-то, у кого такая же проблема в netbeans.

В IntelliJ при создании проекта, когда вы выполняете мастер New> Project, выберите зависимость «BootstrapFX».

Это добавляет требует "org.kordamp.bootstrapfx.core;" в ваши модули-info.java и решил проблему для меня в IntelliJ 2021.2.1.

Совет: используйте мастер создания нового проекта вместо JavaFX SDK.

Не используйте загруженный JavaFX SDK. Используйте инструмент сборки, например Maven, чтобы добавить JavaFX и другие зависимости. Используйте мастер создания нового проекта JavaFX для создания проекта.

Мастер настроит модульный проект на основе инструмента сборки (maven или gradle).

ИМО, это гораздо более простой и лучший способ создать новый проект. Проект, созданный таким образом, проще в использовании, более полезен и ориентирован на будущее, поскольку:

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

    • IDE может автоматически находить необходимые модули из зависимостей maven, поэтому вам не нужно указывать --module-pathвручную.
    • Проект содержит module-info.javaфайл, поэтому вам не нужно --add-modulesвручную.
  2. Проект самодостаточен, и им легче поделиться:

    • Если кто-то еще хочет его использовать, ему просто нужно установить стандартную Java + Maven или Gradle, а не искать и загружать JavaFX SDK.
  3. Проект можно легко построить с помощью инструмента непрерывной интеграции, такого как Jenkins:

    • При ручной зависимости SDK настройка Jenkins для сборки проекта будет сложной задачей.
  4. Проект можно связать со средой выполнения с помощью jpackage или jlink.

    • Это потому, что это модульное приложение.
  5. Вы можете использовать механизм зависимостей для добавления зависимостей от других программных библиотек.

    • Любому нетривиальному приложению потребуются дополнительные зависимости; лучше всего управлять зависимостями JavaFX и другими зависимостями так же, как IMO.

Действия по устранению неполадок при использовании JavaFX SDK

У вас есть проблема с окружающей средой, поэтому я не могу дать окончательный ответ, просто предоставьте шаги по устранению неполадок, чтобы вы могли восстановить свою среду.

  1. Выполните шаги по началу работы с OpenJFX IO для Intellij.

    • Если точно следовать инструкциям, должно получиться.
  2. Если вы хотите продолжить использование SDK, поместите его в место без пробелов или укажите путь при его использовании.

  3. Пользовательский интерфейс Idea для аргументов виртуальной машины чрезвычайно сбивает с толку, убедитесь, что вы действительно установили аргументы виртуальной машины, а не программные аргументы. Для этого см. этот ответ на:

  4. Разверните команду выполнения Java, которую Idea помещает на панель консоли при выполнении, и скопируйте ее как текст, чтобы добавить к вашему вопросу в формате кода.

  5. Когда вы смотрите на команду выполнения Java, убедитесь, что аргументы модуля находятся перед именем вашего основного класса, а не после.

  6. Скопируйте команду выполнения в командную строку и попробуйте запустить ее там.

  7. При указании пути к модулю попробуйте использовать фактический путь (правильно заключённый в кавычки, если это требуется), а не переменную среды.

Другие вопросы по тегам