Вопрос или проблема
Я хотел развернуть свое первое JavaFX JDK 11 приложение с использованием IntelliJ.
Я действовал следующим образом:
Файл -> Структура проекта -> Артефакты -> MyApp.jar -> ОК
Затем:
Сборка -> Сборка артефактов -> Сборка
Однако я получил следующую ошибку:
Ошибка: Java FX Packager: Не удается собрать артефакт – fx:deploy недоступен в этом JDK
Я прочитал, что последняя версия JDK, поддерживающая этот способ упаковки, – это JDK 10.
Поэтому я переключил свой проект с JDK 11 на JDK 10, но проблема все еще присутствует.
Приложение компилируется и работает хорошо в IDE.
Есть ли предложения, как это решить?
Спасибо 🙂
Я потратил довольно много часов на исправление этого. Решение устраняет все сообщения об ошибках при попытке запустить приложение javafx, а также при попытке выполнить jar-файл вне IntelliJ.
Вам нужно отредактировать файл манифеста.
Также необходимо добавить библиотеку + иметь прокси (так сказать) основной класс, выполняемый для правильного выполнения.
Сложно объяснить. Но без последней части ничего не работает, если у вас есть “extends Application” в вашем основном классе.
Может, вы захотите взглянуть: https://www.youtube.com/watch?v=D4D7daAmpV4
Ответ или решение
Проблема, с которой вы столкнулись при попытке развернуть ваше JavaFX приложение, связана с отсутствием поддержки необходимого инструмента для создания артефактов в выбранной версии JDK. Давайте подробнее рассмотрим возможные причины проблемы и решение, которое помогут вам успешно развернуть ваше приложение.
Проблема: Невозможность сборки артефакта
Ошибка "Can’t build artifact – fx:deploy is not available in this JDK" указывает на то, что используемая вами версия Java Development Kit (JDK) не поддерживает функцию fx:deploy
, необходимую для упаковки JavaFX приложений. Функция fx:deploy
была доступна только в JDK 10 и более ранних версиях. С JDK 11 Oracle прекратил поддержку JavaFX в качестве части JDK, что требует использования сторонних библиотек, таких как OpenJFX.
Решение проблемы
-
Использование OpenJFX: Вместо того чтобы использовать JDK 10, как вы уже пробовали, рекомендуется использовать OpenJFX, который является открытой версией JavaFX. Убедитесь, что вы добавили требуемые зависимости OpenJFX в ваш проект.
-
Добавление зависимостей: Если вы используете систему сборки, такую как Maven или Gradle, добавьте необходимые зависимости. Например, для Maven вы можете использовать следующий код в вашем
pom.xml
:<dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>17.0.1</version> </dependency>
Для Gradle:
implementation 'org.openjfx:javafx-controls:17.0.1'
-
Настройка манифеста: Убедитесь, что файл манифеста вашего JAR-файла правильно настроен. Ваша основная класс-программа, которая расширяет
Application
, должна быть указана в манифесте. Пример:Manifest-Version: 1.0 Main-Class: com.example.Main
Обратите внимание, что указывать путь к главному классу нужно с учетом пакета.
-
Создание «прокси» класса: Если у вас есть специфические требования к запуску вашего приложения, может потребоваться создание «прокси» класса, который будет выполнять необходимые предварительные действия перед запуском вашего JavaFX приложения:
public class Launcher { public static void main(String[] args) { MyApp.main(args); // вызов вашего основного класса } }
-
Экспорт и упаковка: Вместо использования встроенной функции упаковки IntelliJ, рассмотрите возможность использования инструментов сборки, таких как jlink, чтобы создать самодостаточный исполняемый файл для вашего JavaFX приложения. Это упростит развертывание и сделает ваше приложение более независимым от настроек JDK на целевой машине.
Заключение
Следуя этим шагам, вы сможете успешно решить проблемы, связанные с развертыванием вашего JavaFX приложения. Регулярные обновления и ознакомление с изменениями в JDK и JavaFX помогут вам избегать подобных ситуаций в будущем. Обратите внимание на официальную документацию OpenJFX, чтобы быть в курсе последних изменений и появлений новых функций. Успехов в ваших проектах!