JavaFX і OpenJDK


109

Я намагаюся вирішити, чи можу я перейти на JavaFX для користувальницького інтерфейсу моєї програми Java. Більшість моїх користувачів використовували б ORE JRE, в який сьогодні інтегрована JavaFX. Однак деякі використовують OpenJDK (на Linux). Це (старе) питання говорить про те, що OpenJDK дуже погано справляється з JavaFX. Відповідно до цього питання, альтернативний OpenJFX буде повністю інтегрований у OpenJDK лише у версії 9. Отже, моє запитання є подвійним:

  • Чи є підтримка JavaFX у OpenJDK все ще така погана?
  • Якщо так, чи існують Linux-дистрибутиви, які вже пропонують пакет OpenJFX, щоб користувачам не довелося будувати його самостійно ?

Який режим виконання вашої програми (як вона розгорнута?)
jewelsea

@jewelsea Вона працює як окрема програма.
mdriesen

@docM це було б рішенням перейти на oracle- (sun) -jdk для машин ubuntu? webupd8.org/2012/01/…
nyyrikki

@nyyrikki Це варіант. Але я б краще дотримуватися Java Swing, якщо JavaFX і OpenJDK не змішуються.
mdriesen

2
@Yngve Я переніс все на JavaFX, коли Ubuntu та Debian почали включати пакети.
mdriesen

Відповіді:


99

JavaFX є частиною OpenJDK

Сам проект JavaFX є відкритим кодом і є частиною проекту OpenJDK .

Оновлення грудня 2019 року

Щоб отримати поточну інформацію про використання JavaFX з відкритим кодом, відвідайте https://openjfx.io . Сюди входять інструкції щодо використання JavaFX як модульної бібліотеки, до якої можна отримати доступ з існуючої JDK (наприклад, відкритої установки 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) повністю з джерела, який не має залежності від JDK Oracle або закритого вихідного коду.

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

Як зазначається в коментарях до цього питання та в іншій відповіді, дистрибутиви Debian Linux пропонують двійкову дистибуцію JavaFX на основі OpenJDK:

(на даний момент це працює лише для Java 8, наскільки я знаю).

Відмінності між відкритим 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.

Це означає, що відкрита версія 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, yum repositories). В даний час це не робиться, але я був би дуже здивований, якби пакети Java 8 Linux не включали JavaFX, коли Java 8 виходить у березні 2014 року.

Оновлення, грудень 2019 :

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

Якщо ви хочете заздалегідь побудований JDK, що включає JavaFX, розгляньте дистрибутиви Liberica JDK , які передбачені для різних платформ.

Поради щодо розгортання значних програм

Раджу використовувати автономний режим розгортання програми Java .

Опис цього режиму розгортання:

Додаток встановлюється на локальному диску та працює як окрема програма з використанням приватної копії Java та JavaFX. Додаток можна запустити так само, як і інші нативні програми для цієї операційної системи, наприклад, за допомогою ярлика на робочому столі або в меню.

Ви можете створити автономну програму або з дистрибутива Oracle JDK, або з збірки OpenJDK, що включає JavaFX. Наразі це простіше зробити з JDK Oracle.

Оскільки версія Java в комплекті з вашим додатком, вам не потрібно дбати про те, яка версія Java була попередньо встановлена ​​на машині, якими можливостями вона володіє і чи сумісна вона з вашою програмою. Натомість ви можете протестувати свою програму на точній версії Java-версії та розповсюдити її за допомогою програми. Користувацький досвід розгортання вашої програми буде таким самим, як встановлення нативної програми на їхній машині (наприклад, встановлено Windows .exe або .msi, OS X .dmg, linux .rpm або .deb).

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

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


@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 Лозинський

2
@NoBugs Це може бути занадто пізно, щоб відповідь була корисною, але Ubuntu 14.04 не включає OpenJDK 8, тому ви не можете знайти відповідний пакет JFX. Я не можу згадати, який реліз Ubuntu представив його, але він, безумовно, доступний в Ubuntu 16.04 - разом із пакетом "openjfx".
Майк Аллен

50

Для мене це спрацювало.

$ sudo apt-get install openjfx

3
Мабуть, найпростіший спосіб додати JavaFX до вашого Linux JDK
Reimeus

Хоча це правильна відповідь для багатьох, деякі ОС не пропонують цей пакет. Для тих, хто не webupd8 PPAдля Ubuntu, і fedyвстановлення на робочому столі для Fedora - це два швидких способи встановити останню версію JDK / JRE Oracle, що включає 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 як зовнішня бібліотечна банка в моєму шляху побудови Eclipse, програми запускалися в контексті Eclipse. Запуск "політики apt-кеша libgtk2.0-0" дав "Встановлено: 2.24.32-1ubuntu1"
Phil Freihofner

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

скопіюйте всі файли з zip OpenFX поверх JDK, voila, у вас є OpenJDK з JavaFX.

Оновлення :

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


Дякую. Я перевірив github-сайт AdoptOpenJDK, але в ньому написано "застаріле сховище". Чи знаєте ви, де доступні новіші OpenJFX-бінарні файли, що відповідають збіркам нового repo github.com/AdoptOpenJDK/openjdk8-binaries/releases ?
Хаутман

3

Спробуйте obuildfactory .

Необхідно змінити ці сценарії (містять помилки і точно не виконувати потрібну річ), я завантажу мої сценарії, роздвоєні з obuildfactory, у найближчі кілька днів. і тому я також оновлю відповідь відповідно.

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


1
на жаль, для OpenJFX не існує аналога Windows
madduci

0

Відповідно до Oracle інтеграція OpenJDK & javaFX буде в 1 кварталі 2014 року (див. Дорожню карту: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Отже, на 1-е запитання відповідь полягає в тому, що до цього потрібно чекати. Для 2-го питання іншого шляху немає. Отже, зараз перейдіть з java swing або запустіть javaFX і зачекайте


посилання у вашій відповіді порушено. Закриття
ILMostro_7

@ ILMostro_7 посилання у вашому коментарі порушено
Блейк

Він досить старий. Я впевнений, що вони змінюють свій сайт, коли формуються нові плани.
ILMostro_7

На наступному сайті вказується, що javafx буде окремою бібліотекою, починаючи з java-11. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.