JavaFX и OpenJDK

109

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

  • Неужели поддержка JavaFX в OpenJDK все еще так плоха?
  • Если да, то есть ли какие-либо дистрибутивы Linux, которые уже предлагают пакет OpenJFX, чтобы пользователям не приходилось создавать его самостоятельно ?
Mdriesen
источник
Каков режим выполнения вашего приложения (как оно развертывается?)
jewelsea
@jewelsea Он работает как отдельная программа.
mdriesen
@docM может ли это решение переключиться на oracle- (sun) -jdk для машин ubuntu? webupd8.org/2012/01/…
nyyrikki 01
@nyyrikki Это вариант. Но я бы предпочел Java Swing, если JavaFX и OpenJDK не смешиваются.
mdriesen 02
2
@Yngve Я все портировал на JavaFX, когда начали работать Ubuntu и Debian, включая пакеты.
mdriesen

Ответы:

99

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

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

Обновление декабрь 2019 г.

Для получения актуальной информации о том, как использовать JavaFX с открытым исходным кодом, посетите https://openjfx.io . Сюда входят инструкции по использованию JavaFX в качестве модульной библиотеки, доступ к которой осуществляется из существующего JDK (например, установка Open JDK ).

Репозиторий с открытым исходным кодом для JavaFX находится по адресу https://github.com/openjdk/jfx .

В связанном исходном местоположении вы можете найти файлы лицензии для открытого JavaFX (в настоящее время эта лицензия соответствует лицензии для OpenJDK: исключение GPL + classpath).

Вики проекта находится по адресу: https://wiki.openjdk.java.net/display/OpenJFX/Main.

Если вы хотите быстро приступить к использованию открытого JavaFX, дистрибутивы Belsoft Liberica JDK предоставляют готовые двоичные файлы OpenJDK, которые (в настоящее время) включают открытый JavaFX для различных платформ.

Для распространения в качестве автономных приложений в Java 14 планируется реализовать JEP 343: Packaging Tool , который «поддерживает собственные форматы упаковки, чтобы конечные пользователи могли выполнять установку естественным образом. Эти форматы включают msi и exe в Windows, pkg и dmg в macOS. , а также deb и rpm в Linux. "для развертывания приложений на основе OpenJFX с собственными установщиками и без дополнительных зависимостей платформы (например, предустановленного JDK).


Старая информация, которая со временем может устареть

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

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

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

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

(в настоящее время, насколько мне известно, это работает только для Java 8).

Различия между 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 (например, автономных приложений).

Обновление декабрь 2019 г .:

Была разработана версия WebStart с открытым исходным кодом для JDK 11+, которая доступна по адресу https://openwebstart.com .

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

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

Обновление, декабрь 2019 г . :

Теперь, когда JavaFX отделен от большинства бинарных дистрибутивов JDK и JRE (включая дистрибутив Oracle) и вместо этого доступен либо в виде автономного SDK, либо в виде набора jmods, либо в виде зависимостей библиотеки, доступных из центрального репозитория Maven (как обозначено как https://openjfx.io ), необходимость включения JavaFX в стандартные дистрибутивы Linux OpenJDK меньше.

Если вам нужен предварительно собранный JDK, который включает JavaFX, рассмотрите дистрибутивы Liberica JDK , которые предоставляются для множества платформ.

Консультации по развертыванию важных приложений

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

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

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

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

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

Примечание. Функция автономного приложения была доступна только для Java 8 и 9, но не для Java 10-13. В Java 14 через JEP 343: Packaging Tool планируется снова обеспечить поддержку этой функции из дистрибутивов OpenJDK.

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

Jewelsea
источник
@Emmanuel, спасибо за вашу работу над этим. JavaFX является частью JDK, поэтому (по крайней мере, до тех пор, пока JDK не станет модульным), я не уверен, зачем нужен отдельный пакет OpenJFX вместо включения всех необходимых файлов времени выполнения в стандартный пакет OpenJDK (как это делается с Дистрибутивы Oracle JDK). Список рассылки с открытым JFX будет хорошее место , если требуется дальнейшее обсуждение.
jewelsea
Отдельный пакет дает определенную степень гибкости, если кого-то интересует JDK, но не JavaFX. Разве модульность не является целью Java 9? :)
Эммануэль Бург
11
«В настоящее время это не делается, но я был бы весьма удивлен, если бы пакеты Java 8 Linux не включали JavaFX, когда Java 8 будет выпущена в марте 2014 года». Вы должны быть удивлены, поскольку OpenJDK 8 не включает OpenJFX.
2
В Arch Linux также есть пакеты для openjfx: archlinux.org/packages/?name=java-openjfx
Maciek oziński,
2
@NoBugs Это может быть слишком поздно, чтобы получить полезный ответ, но Ubuntu 14.04 не включает OpenJDK 8, поэтому вы не можете найти соответствующий пакет JFX. Я не могу вспомнить, в каком выпуске Ubuntu он был представлен, но он определенно доступен в Ubuntu 16.04 - вместе с пакетом openjfx.
Майк Аллен
50

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

$ sudo apt-get install openjfx
Винил Коввури
источник
3
Вероятно, самый простой способ добавить JavaFX в ваш Linux JDK
Реймеус 01
Хотя это правильный ответ для многих, некоторые ОС не предоставляют этот пакет. Для тех, кто не работает webupd8 PPAс Ubuntu и fedyнастольным установщиком для Fedora, есть два быстрых способа установить последнюю версию Oracle JDK / JRE, которая включает JavaFX.
tresf
3
Для Ubuntu 18.04 это по-прежнему зависит от Java 8, но по умолчанию используется java 10. Если вы установите его, у вас будет 2 javas.
jgomo3
Согласно Как установить openjfx вместе с openjdk-11? для версий Java 11+, чтобы использовать JavaFX, а не apt-get install openjfx(который в настоящее время работает только для Java 8), вы можете использовать инструкции с веб-сайта openjfx.io , где JavaFX "доступен как SDK для конкретной платформы" в виде числа jmods и как набор артефактов в maven central. ".
jewelsea
Пакет Debian openjfx был выпущен для OpenJDK-11 по адресу tracker.debian.org/pkg/openjfx , так что, возможно, этот метод. sudo apt-get install openjfx, будет по-прежнему поддерживаться и работать для более поздних выпусков JavaFX и ubuntu. Обратите внимание, что пакеты Debian openjfx, похоже, обновляются не так часто, как библиотеки, распространяемые openjfx.io, поэтому, если вы хотите использовать самую последнюю версию, вам, вероятно, лучше всего использовать дистрибутив openjfx.io.
jewelsea
11

В качестве быстрого решения вы можете скопировать файл 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 или выше

Максим Шатов
источник
Я не могу найти, где установлен openjfx в Ubuntu 18.04, но я украл эти баночки и другие файлы из другой программы, установленной на моем жестком диске (вы можете проверить что-то вроде phpstorm или clion :)), и это сработало как шарм. Спасибо
Heichou
Я скопировал файлы из JDK1.8.0_251 (Oracle Java 1.8) в java-8-openjdk-amd64 (репозиторий Ubuntu OpenJDK 8). По-прежнему не удалось запустить файлы jar с помощью JavaFX. Но когда я просто связался с jfxrt.jar как с внешней библиотекой jar в моем пути сборки Eclipse, программы действительно запускались в контексте Eclipse. Выполнение "политики apt-cache policy libgtk2.0-0" дало "Установлено: 2.24.32-1ubuntu1"
Фил Фрейхофнер,
7

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

Где взять готовые библиотеки 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

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

Обновление :

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

Маули
источник
Спасибо. Я проверил github-сайт AdoptOpenJDK, но там написано «устаревший репозиторий». Вы знаете, где доступен новый соответствующий OpenJFX-двоичный файл, соответствующий сборкам нового репозитория github.com/AdoptOpenJDK/openjdk8-binaries/releases ?
Houtman
3

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

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

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

DeepSidhu1313
источник
1
к сожалению, для OpenJFX нет аналога в Windows
madduci
0

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

Статис Андроникос
источник
ссылка в вашем ответе не работает. Последняя вещь, на которую я пришел, - это oracle.com/us/corporate/press/1854982
ILMostro_7
@ ILMostro_7 ссылка в вашем комментарии не работает
Блейк
Достаточно стар. Я уверен, что они меняют свой сайт по мере появления новых планов.
ILMostro_7
Следующий сайт указывает, что javafx будет отдельной библиотекой, начиная с java-11. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7,