Есть ли способ добавить 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 и более поздних версиях . Более ранние версии претерпели драматическую эволюцию, поэтому старые материалы сейчас могут быть неактуальны.

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