Есть ли способ добавить JavaFX 20 в существующий проект Maven Java 20 в среде IDE NetBeans?
Недавно я начал программировать игру, и для переключения сцен я хочу использовать JavaFX.
Я провел обширное исследование, чтобы выяснить, могу ли я использовать JavaFX в своем проекте, и если да, то как.
Может ли кто-нибудь дать мне некоторое представление об этом и о том, как я смогу этого добиться. Если включение JavaFX в мой код Java невозможно, могу ли я получить альтернативу, например, создание совершенно нового проекта JavaFX и добавление моего кода из моего файла Java.
Пример того, о чем я говорю:
(Action Listener) * When button is clicked *
{
(JavaFX takes in the variable name of the current JPanel and transitions to another JPanel)
}
Я попробовал установить библиотеку JavaFX в свою среду IDE NetBeans, и это сработало. Однако я не пробовал напрямую добавлять JavaFX в свой проект.
Я думаю, что должно произойти, чтобы это соответствовало моему коду, поскольку JavaFX написан на Java. Однако в ходе своих исследований я узнал, что JavaFX является модульным, поэтому, чтобы оправдать мои ожидания, мне придется создать совершенно новый проект JavaFX и импортировать в него свой код.
Однако я не уверен и хотел бы получить информацию по этому поводу извне.
1 ответ
JavaFX против Swing
Ваше упоминание о JPanel
заставляет меня думать, что вы сейчас используете Swing в качестве среды графического интерфейса.
Вы должны понимать, что JavaFX является преемником Swing. JavaFX предназначен для замены Swing, а не для дополнения.
- Swing является частью Java SE, входящей в состав каждого JDK. Oracle и сообщество Java будут поддерживать Swing еще долгие годы. Но платформа находится в режиме обслуживания , без каких-либо дополнительных функций.
- JavaFX — это набор внешних библиотек, не всегда поставляемых в комплекте с JDK (хотя Azul Systems и BellSoft предлагают версии своего JDK с пакетом JavaFX). JavaFX находится в постоянной разработке как проект с открытым исходным кодом OpenJFX на зонтичном сайте OpenJDK . Версия JavaFX/OpenJFX выпускается примерно в то же время, что и каждый выпуск Java/OpenJDK, каждые шесть месяцев. OpenJFX совместно возглавляют Oracle Corp и Gluon.
Кроме того… JavaFX — это не чистая Java. Библиотеки OpenJFX содержат собственный код, специфичный для конкретной хост-платформы.
Смешивание JavaFX и Swing
Вы можете смешивать некоторый контент JavaFX в приложении Swing. Аналогичным образом вы можете смешивать некоторый контент Swing с приложением JavaFX. Но в таком смешивании есть проблемы и ограничения.
Поэтому, если вы только запускаете приложение, я бы посоветовал выбрать одну из двух платформ и придерживаться ее. Смешение лучше всего подходит для больших приложений, которые не могут позволить себе масштабную переработку и хотят постепенно перейти от Swing к JavaFX.
Чтобы узнать больше о смешивании JavaFX с Swing, начните с этого несколько устаревшего руководства Oracle, JavaFX-Swing Interoperability.
Модульность
JavaFX является модульным, поэтому, чтобы оправдать мои ожидания, мне пришлось создать совершенно новый проект JavaFX.
Да, JavaFX имеет модульную структуру с помощью системы модулей платформы Java . Это немного усложняет настройку. Вам понадобится короткийmodule-info.java
файл. Вы найдете несколько примеров, написанных мной и другими, прямо здесь, на Stack Overflow. Кроме того, ваша IDE может помочь с исправлением конфигурации модуля (IntelliJ мне помог).
Технически вы можете перенастроить существующее приложение, сделав его модульным. Но лично мне лениво… Я бы начал новый проект с уже модульным шаблоном приложения.
Новый проект
создание совершенно нового проекта JavaFX
Если вы решите использовать JavaFX, я бы предложил пойти по этому пути. Начните с нового проекта JavaFX, запустите его и запустите, скомпилировав и построив его.
Управляйте своим проектом с помощью Apache Maven или Apache Gradle . Эти инструменты управления зависимостями автоматически загрузят и установят необходимые библиотеки JavaFX (на самом деле библиотеки OpenJFX). И эти инструменты также будут очень полезны, когда вы позже захотите упаковать готовое приложение с помощью встроенной JVM через jlink & jpackage и, возможно, заранее выполнить компиляцию собственного кода с использованием GraalVM.
Предостережение... Честно говоря, признаюсь:
- Я обнаружил, что процесс объединения JVM с моим приложением JavaFX довольно сложен и разочаровывает. Пока что мне это не удалось, и я сдался на данный момент. Мое текущее приложение JavaFX должно быть доставлено моим первым нескольким пользователям после установки JVM в комплекте с библиотеками JavaFX на локальные компьютеры пользователей.
- Что касается компиляции AOT для машинного кода, то для меня это тоже не удалось. Но я новичок в этом, а эти технологии относительно новые и передовые.
Видимо, другие добились успеха, поэтому я попробую еще раз. Когда я это сделаю, я сначала попробую явные консольные команды, показанные Кевином Рашфортом в его презентации 2023 года « JavaFX 20 and Beyond» .
После того, как ваш новый проект, управляемый Maven/Gradle, будет запущен, перенесите код игры из старого проекта. В зависимости от существующего кода этот процесс может быть довольно простым. И мудрый совет: делайте это постепенно, чтобы ваш новый проект JavaFX продолжал успешно компилироваться и работать на каждом этапе.
Maven/Gradle важнее вашей IDE
в IDE NetBeans?
Я ожидаю, что вы добьетесь успеха во всем этом, используя NetBeans, поскольку Maven/Gradle работает одинаково во всех IDE, включая NetBeans, Eclipse и IntelliJ.
Лично я обнаружил, что запустить приложение JavaFX довольно просто, используя шаблон нового проекта для JavaFX, встроенный в IntelliJ . Но это только мой вкус. Любая из IDE должна работать хорошо.
Я попробовал установить библиотеку JavaFX в свою среду IDE NetBeans, и это сработало. Однако я не пробовал напрямую добавлять JavaFX в свой проект.
Похоже, вы используете собственный способ добавления библиотек в свой проект NetBeans. Я предлагаю вам поскорее прекратить это делать и вместо этого научиться использовать Maven или Gradle, как упоминалось выше. Эти инструменты упрощают процесс получения и установки библиотек. И, как я уже упоминал выше, они могут значительно помочь в более сложных сборках, таких как объединение JVM и создание AOT/собственного кода.
Кривая обучения Maven или Gradle поначалу раздражает, но оно того стоит. Многие, если не большинство, профессиональные Java-разработчики используют менеджер зависимостей и инструмент управления сборкой, такой как Maven, Gradle или один из немногих других.
Кроме того, изучение Maven или Gradle освобождает вас от слишком тесной привязки к собственной системе сборки конкретной IDE. Использование одной из этих независимых систем сборки упрощает последующий переход с одной IDE на другую.
Совет: обратите особое внимание на любые сообщения о JavaFX/OpenJFX на Stack Exchange, написанные user1155209 .
Совет: Обязательно изучите более свежие материалы по JavaFX. Сосредоточьтесь на JavaFX 8 и более поздних версиях . Более ранние версии претерпели драматическую эволюцию, поэтому старые материалы сейчас могут быть неактуальны.