Модульное приложение 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).
ИМО, это гораздо более простой и лучший способ создать новый проект. Проект, созданный таким образом, проще в использовании, более полезен и ориентирован на будущее, поскольку:
Среда IDE сможет запускать проект без необходимости вручную указывать аргументы командной строки для модульной системы. Это потому что:
- IDE может автоматически находить необходимые модули из зависимостей maven, поэтому вам не нужно указывать
--module-path
вручную. - Проект содержит
module-info.java
файл, поэтому вам не нужно--add-modules
вручную.
- IDE может автоматически находить необходимые модули из зависимостей maven, поэтому вам не нужно указывать
Проект самодостаточен, и им легче поделиться:
- Если кто-то еще хочет его использовать, ему просто нужно установить стандартную Java + Maven или Gradle, а не искать и загружать JavaFX SDK.
Проект можно легко построить с помощью инструмента непрерывной интеграции, такого как Jenkins:
- При ручной зависимости SDK настройка Jenkins для сборки проекта будет сложной задачей.
Проект можно связать со средой выполнения с помощью jpackage или jlink.
- Это потому, что это модульное приложение.
Вы можете использовать механизм зависимостей для добавления зависимостей от других программных библиотек.
- Любому нетривиальному приложению потребуются дополнительные зависимости; лучше всего управлять зависимостями JavaFX и другими зависимостями так же, как IMO.
Действия по устранению неполадок при использовании JavaFX SDK
У вас есть проблема с окружающей средой, поэтому я не могу дать окончательный ответ, просто предоставьте шаги по устранению неполадок, чтобы вы могли восстановить свою среду.
Выполните шаги по началу работы с OpenJFX IO для Intellij.
- Если точно следовать инструкциям, должно получиться.
Если вы хотите продолжить использование SDK, поместите его в место без пробелов или укажите путь при его использовании.
Пользовательский интерфейс Idea для аргументов виртуальной машины чрезвычайно сбивает с толку, убедитесь, что вы действительно установили аргументы виртуальной машины, а не программные аргументы. Для этого см. этот ответ на:
Разверните команду выполнения Java, которую Idea помещает на панель консоли при выполнении, и скопируйте ее как текст, чтобы добавить к вашему вопросу в формате кода.
Когда вы смотрите на команду выполнения Java, убедитесь, что аргументы модуля находятся перед именем вашего основного класса, а не после.
Скопируйте команду выполнения в командную строку и попробуйте запустить ее там.
При указании пути к модулю попробуйте использовать фактический путь (правильно заключённый в кавычки, если это требуется), а не переменную среды.