JavaFX и OpenJDK

Я пытаюсь решить, могу ли я переключиться на JavaFX для пользовательского интерфейса моего Java-приложения. Большинство моих пользователей будут использовать Oracle JRE, в которой в наши дни интегрирован JavaFX. Однако некоторые используют OpenJDK (в Linux). Этот (старый) вопрос предполагает, что OpenJDK очень плохо работает с JavaFX. Согласно этому, альтернативный OpenJFX будет полностью интегрирован в OpenJDK в версии 9. Поэтому мой вопрос двоякий:

  • Поддерживается ли поддержка JavaFX в OpenJDK так плохо?
  • Если да, существуют ли какие-либо дистрибутивы Linux, которые уже предлагают пакет OpenJFX, поэтому пользователям не нужно будет самостоятельно создать?

Ответ 1

JavaFX является частью OpenJDK

Сам проект JavaFX является открытым исходным кодом и является частью проекта OpenJDK.

Сборка JavaFX из репозитория OpenJDK

Вы можете создать открытую версию OpenJDK (включая JavaFX) полностью из исходного кода, который не зависит от Oracle JDK или закрытого исходного кода.

Обновление: использование дистрибутива JavaFX, предварительно созданного из источников OpenJDK

Как отмечено в комментариях к этому вопросу и в другом ответе, дистрибутивы Debian Linux предлагают двоичное распределение JavaFX, основанное на OpenJDK:

Различия между Open JDK и Oracle JDK относительно JavaFX

Следующая информация была предоставлена для Java 8. Начиная с Java 9, кодировка VP6 устарела для JavaFX, а технология развертывания встроенных приложений Oracle WebStart/Browser также устарела. Поэтому будущие версии JavaFX, даже если они распространяются Oracle, скорее всего, не будут включать в себя какие-либо технологии, не имеющие открытого исходного кода.

Oracle JDK включает в себя некоторое программное обеспечение, которое нельзя использовать из OpenJDK. Есть два основных компонента, которые относятся к JavaFX.

  1. Видеокодек ON2 VP6, который принадлежит Google и Google, еще не открыт.
  2. Технология развертывания приложений Oracle WebStart/Browser Embedded.

Это означает, что открытая версия JavaFX не может воспроизводить файлы FLV VP6. Это не большая потеря, поскольку трудно найти кодеры VP6 или носители, закодированные в VP6.

Другие более распространенные форматы видео, такие как H.264, будут хорошо воспроизводиться с открытой версией JavaFX (при условии, что на целевом компьютере предварительно установлены соответствующие кодеки).

Отсутствие технологии развертывания WebStart/Browser Embedded на самом деле связано с самим OpenJDK, а не с JavaFX. Эта технология может быть использована для развертывания приложений не-JavaFX.

Было бы замечательно, если бы сообщество OpenSource разработало технологию развертывания для Java (и другого программного обеспечения), которая полностью заменила методы развертывания WebStart и Browser Embedded, предоставляя приятный и легкий пользовательский интерфейс для распространения приложений. Я полагаю, что некоторые проекты начали служить такой цели, но они еще не достигли высокого уровня зрелости и усыновления.

Лично я считаю, что WebStart/Browser Embedded являются устаревшей технологией, и в настоящее время существуют лучшие способы развертывания многих приложений JavaFX (таких как автономные приложения).

Кому нужно создавать дистрибутивы Linux OpenJDK, включающие JavaFX

Люди, которые создают пакеты для дистрибутивов Linux на основе OpenJDK (например, Redhat, Ubuntu и т.д.), Должны создавать RPM для JDK и JRE, которые включают JavaFX. Затем эти распространители программного обеспечения должны поместить сгенерированные пакеты в свои стандартные репозитории кода распространения (например, репозитории fedora/red hat network yum). В настоящее время это не делается, но я был бы весьма удивлен, если бы пакеты Java 8 Linux не включали JavaFX, когда Java 8 выпущена в марте 2014 года.

Рекомендации по развертыванию для основных приложений

Я советую использовать автономное приложение Java в режиме развертывания.

Описание этого режима развертывания:

Приложение установлено на локальный диск и работает как автономный программа, использующая частную копию Java и JavaFX runtime. приложение может быть запущено так же, как и другие родные приложения для этой операционной системы, например, с помощью рабочего стола ярлык или пункт меню.

Вы можете создать автономное приложение либо из дистрибутива Oracle JDK, либо из сборки OpenJDK, включающей JavaFX. В настоящее время это проще сделать с помощью Oracle JDK.

Поскольку версия Java связана с вашим приложением, вам не нужно заботиться о том, какая версия Java могла быть предварительно установлена на компьютере, какие возможности она имеет и совместима ли она с вашей программой. Вместо этого вы можете проверить свое приложение на соответствие точной версии среды выполнения Java и распространить ее вместе с вашим приложением. Пользовательское развертывание вашего приложения будет таким же, как и установка собственного приложения на их компьютер (например, установка Windows.exe или .msi, OS X.dmg, linux.rpm или .deb).

Обновление, апрель 2018 года: информация о текущей политике Oracle в отношении будущих разработок

Ответ 2

Для меня это сработало.

$ sudo apt-get install openjfx

Ответ 3

В качестве быстрого решения вы можете скопировать JAR файл среды выполнения JavaFX и файлы, на которые ссылается Oracle JRE (JDK), или любое автономное приложение, использующее JavaFX (например, JavaFX Scene Builder 2.0):

cp <JRE_WITH_JAVAFX_HOME>/lib/ext/jfxrt.jar     <JRE_HOME>/lib/ext/
cp <JRE_WITH_JAVAFX_HOME>/lib/javafx.properties <JRE_HOME>/lib/
cp <JRE_WITH_JAVAFX_HOME>/lib/amd64/libprism_*  <JRE_HOME>/lib/amd64/
cp <JRE_WITH_JAVAFX_HOME>/lib/amd64/libglass.so <JRE_HOME>/lib/amd64/
cp <JRE_WITH_JAVAFX_HOME>/lib/amd64/libjavafx_* <JRE_HOME>/lib/amd64/

просто убедитесь, что у вас есть gtk 2.18 или выше

Ответ 4

Также отвечая на этот вопрос:

Где взять готовые библиотеки JavaFX для OpenJDK (Windows)

В Linux это не проблема, но в Windows это не так просто, особенно если вы хотите распространять JRE.

На самом деле вы можете использовать OpenJFX с OpenJDK 8 для Windows, вам просто нужно собрать его самостоятельно:

Загрузите OpenJDK отсюда: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

Загрузите OpenJFX отсюда: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

скопируйте все файлы из zip файла OpenFX поверх JDK, вуаля, у вас есть OpenJDK с JavaFX.

Обновление:

К счастью, от Azul теперь есть сборка OpenJDK + OpenJFX, которую можно скачать на странице их сообщества: https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx

Ответ 5

Попробуйте obuildfactory.

Необходимо изменить эти сценарии (содержит ошибку и не выполняет именно "вещь" ), я загружу мои скрипты, раздвоенные из obuildfactory, в ближайшие несколько дней. и поэтому я также буду соответствующим образом обновлять свой ответ.

До тех пор наслаждайтесь, сэр:)

Ответ 6

Согласно Oracle, интеграция OpenJDK и javaFX будет на 1-й квартал (см. дорожную карту: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html). Итак, для первого вопроса ответ заключается в том, что вам нужно подождать до этого. Для второго вопроса нет другого пути. Итак, теперь перейдите с java swing или запустите javaFX и подождите