JavaFX und OpenJDK

109

Ich versuche zu entscheiden, ob ich für die Benutzeroberfläche meiner Java-Anwendung zu JavaFX wechseln kann. Die meisten meiner Benutzer würden die Oracle JRE verwenden, in die JavaFX heutzutage integriert ist. Einige verwenden jedoch OpenJDK (unter Linux). Diese (alte) Frage legt nahe, dass OpenJDK sehr schlecht mit JavaFX umgeht. Entsprechend dieser Frage wird die Alternative OpenJFX erst in Version 9 vollständig in OpenJDK integriert. Meine Frage ist also zweifach:

  • Ist die JavaFX-Unterstützung in OpenJDK immer noch so schlecht?
  • Wenn ja, gibt es Linux-Distributionen, die bereits ein OpenJFX-Paket anbieten, damit Benutzer es nicht selbst erstellen müssen ?
mdriesen
quelle
Was ist der Ausführungsmodus Ihrer Anwendung (wie wird sie bereitgestellt?)
Jewelsea
@jewelsea Es läuft als eigenständiges Programm.
Mdriesen
@docM wäre es eine lösung, für die ubuntu maschinen auf oracle- (sun) -jdk zu wechseln? webupd8.org/2012/01/…
nyyrikki
@nyyrikki Das ist eine Option. Aber ich bleibe lieber bei Java Swing, wenn JavaFX und OpenJDK nicht zusammenpassen.
mdriesen
2
@Yngve Ich habe alles auf JavaFX portiert, als Ubuntu und Debian angefangen haben, die Pakete einzuschließen.
Mdriesen

Antworten:

99

JavaFX ist Teil von OpenJDK

Das JavaFX-Projekt selbst ist Open Source und Teil des OpenJDK-Projekts .

Update Dezember 2019

Aktuelle Informationen zur Verwendung von Open Source JavaFX finden Sie unter https://openjfx.io . Dies umfasst Anweisungen zur Verwendung von JavaFX als modulare Bibliothek, auf die über ein vorhandenes JDK (z. B. eine Open JDK-Installation ) zugegriffen wird .

Das Open Source Code-Repository für JavaFX befindet sich unter https://github.com/openjdk/jfx .

Am verknüpften Quellspeicherort finden Sie Lizenzdateien für Open JavaFX (derzeit entspricht diese Lizenz der Lizenz für OpenJDK: GPL + Klassenpfadausnahme).

Das Wiki für das Projekt befindet sich unter: https://wiki.openjdk.java.net/display/OpenJFX/Main

Wenn Sie einen schnellen Einstieg in die Verwendung von Open JavaFX wünschen , bieten die Belsoft Liberica JDK- Distributionen vorgefertigte Binärdateien von OpenJDK, die (derzeit) Open JavaFX für eine Vielzahl von Plattformen enthalten.

Für die Verteilung als eigenständige Anwendungen ist für Java 14 die Implementierung von JEP 343: Packaging Tool geplant , das "native Verpackungsformate unterstützt, um Endbenutzern eine natürliche Installationserfahrung zu bieten. Diese Formate umfassen msi und exe unter Windows, pkg und dmg unter macOS und deb und rpm unter Linux. "für die Bereitstellung von OpenJFX-basierten Anwendungen mit nativen Installationsprogrammen und ohne zusätzliche Plattformabhängigkeiten (z. B. ein vorinstalliertes JDK).


Ältere Informationen, die mit der Zeit veraltet sein können

Erstellen von JavaFX aus dem OpenJDK-Repository

Sie können eine offene Version von OpenJDK (einschließlich JavaFX) vollständig aus dem Quellcode erstellen, der keine Abhängigkeiten vom Oracle JDK oder dem geschlossenen Quellcode aufweist.

Update: Verwenden einer aus OpenJDK-Quellen vorgefertigten JavaFX-Distribution

Wie in den Kommentaren zu dieser Frage und in einer anderen Antwort erwähnt, bieten die Debian Linux-Distributionen eine binäre JavaFX-Verteilung basierend auf OpenJDK:

(Derzeit funktioniert dies meines Wissens nur für Java 8).

Unterschiede zwischen Open JDK und Oracle JDK in Bezug auf JavaFX

Die folgenden Informationen wurden für Java 8 bereitgestellt. Ab Java 9 ist die VP6-Codierung für JavaFX veraltet, und die Bereitstellungstechnologie für eingebettete Oracle WebStart / Browser-Anwendungen ist ebenfalls veraltet . Daher werden zukünftige Versionen von JavaFX, selbst wenn sie von Oracle vertrieben werden, wahrscheinlich keine Technologie enthalten, die nicht Open Source ist.

Oracle JDK enthält einige Software, die vom OpenJDK nicht verwendet werden kann. Es gibt zwei Hauptkomponenten, die sich auf JavaFX beziehen.

  1. Der ON2 VP6-Videocodec, der Google und Google gehört, hat keine Open-Source-Funktionen.
  2. Die Oracle WebStart / Browser Embedded-Anwendungsbereitstellungstechnologie.

Dies bedeutet, dass eine offene Version von JavaFX keine VP6 FLV-Dateien abspielen kann. Dies ist kein großer Verlust, da es schwierig ist, in VP6 codierte VP6-Codierer oder -Medien zu finden.

Andere häufigere Videoformate wie H.264 können mit einer offenen Version von JavaFX problemlos wiedergegeben werden (sofern auf dem Zielcomputer die entsprechenden Codecs vorinstalliert sind).

Das Fehlen der WebStart / Browser Embedded-Bereitstellungstechnologie hat eher mit OpenJDK selbst als mit JavaFX zu tun. Diese Technologie kann zum Bereitstellen von Nicht-JavaFX-Anwendungen verwendet werden.

Es wäre großartig, wenn die OpenSource-Community eine Bereitstellungstechnologie für Java (und andere Software) entwickeln würde, die die Bereitstellungsmethoden von WebStart und Browser Embedded vollständig ersetzt und eine schöne, leichte Benutzererfahrung mit geringen Auswirkungen für die Anwendungsverteilung ermöglicht. Ich glaube, es wurden einige Projekte gestartet, um diesem Ziel zu dienen, aber sie haben noch keinen hohen Reifegrad und Adoptionsgrad erreicht.

Persönlich bin ich der Meinung, dass WebStart / Browser Embedded-Bereitstellungen Legacy-Technologien sind und es derzeit bessere Möglichkeiten gibt, viele JavaFX-Anwendungen (z. B. eigenständige Anwendungen) bereitzustellen.

Update Dezember 2019:

Eine Open Source-Version von WebStart für JDK 11+ wurde entwickelt und ist unter https://openwebstart.com verfügbar .

Wer muss Linux OpenJDK-Distributionen erstellen, die JavaFX enthalten?

Es liegt an den Leuten, die Pakete für Linux-Distributionen basierend auf OpenJDK (z. B. Redhat, Ubuntu usw.) erstellen, RPMs für JDK und JRE zu erstellen, die JavaFX enthalten. Diese Software-Distributoren müssen dann die generierten Pakete in ihren Standard-Distributionscode-Repositorys ablegen (z. B. Fedora / Red Hat Network Yum-Repositorys). Derzeit wird dies nicht durchgeführt, aber ich wäre ziemlich überrascht, wenn Java 8 Linux-Pakete JavaFX nicht enthalten würden, wenn Java 8 im März 2014 veröffentlicht wird.

Update, Dezember 2019 :

Jetzt, da JavaFX von den meisten binären JDK- und JRE-Distributionen (einschließlich der Oracle-Distribution) getrennt wurde und stattdessen entweder als eigenständiges SDK, als Satz von jmods oder als Bibliotheksabhängigkeiten verfügbar ist, die im zentralen Maven-Repository verfügbar sind (wie beschrieben) https://openjfx.io ), Standard-Linux-OpenJDK-Distributionen müssen weniger JavaFX enthalten.

Wenn Sie ein vorgefertigtes JDK mit JavaFX wünschen, sollten Sie die Liberica JDK-Distributionen in Betracht ziehen , die für eine Vielzahl von Plattformen bereitgestellt werden.

Hinweise zur Bereitstellung für wesentliche Anwendungen

Ich empfehle, den eigenständigen Anwendungsbereitstellungsmodus von Java zu verwenden .

Eine Beschreibung dieses Bereitstellungsmodus lautet:

Die Anwendung wird auf dem lokalen Laufwerk installiert und als eigenständiges Programm mit einer privaten Kopie der Java- und JavaFX-Laufzeiten ausgeführt. Die Anwendung kann auf die gleiche Weise wie andere native Anwendungen für dieses Betriebssystem gestartet werden, z. B. über eine Desktop-Verknüpfung oder einen Menüeintrag.

Sie können eine eigenständige Anwendung entweder aus der Oracle JDK-Distribution oder aus einem OpenJDK-Build erstellen, der JavaFX enthält. Mit einem Oracle JDK ist dies derzeit einfacher.

Da eine Java-Version in Ihrer Anwendung enthalten ist, müssen Sie sich nicht darum kümmern, welche Java-Version möglicherweise auf dem Computer vorinstalliert ist, über welche Funktionen sie verfügt und ob sie mit Ihrem Programm kompatibel ist. Stattdessen können Sie Ihre Anwendung mit einer genauen Java-Laufzeitversion testen und diese mit Ihrer Anwendung verteilen. Die Benutzererfahrung für die Bereitstellung Ihrer Anwendung entspricht der Installation einer nativen Anwendung auf ihrem Computer (z. B. eine installierte Windows-EXE- oder MSI-Anwendung, eine OS X-DMG, eine Linux-RPM oder -DEB).

Hinweis: Die in sich geschlossene Anwendungsfunktion war nur für Java 8 und 9 und nicht für Java 10-13 verfügbar. Java 14 über JEP 343: Packaging Tool soll diese Funktion erneut von OpenJDK-Distributionen unterstützen.

Update, April 2018: Informationen zur aktuellen Politik von Oracle in Bezug auf zukünftige Entwicklungen

Juwelensee
quelle
@Emmanuel, Danke für deine Arbeit daran. JavaFX ist Teil des JDK, daher bin ich mir (zumindest bis das JDK modularisiert wird) nicht sicher, warum es ein separates OpenJFX-Paket geben würde, anstatt alle erforderlichen Laufzeitdateien in das Standard-OpenJDK-Paket aufzunehmen (wie dies beim Oracle JDK-Distributionen). Die Open-JFX-Mailingliste wäre ein guter Ort, wenn weitere Diskussionen erforderlich sind.
Jewelsea
Ein separates Paket bietet ein gewisses Maß an Flexibilität, wenn sich jemand für das JDK interessiert, nicht jedoch für JavaFX. Ist Modularisierung nicht doch ein Ziel für Java 9? :)
Emmanuel Bourg
11
"Derzeit wird dies nicht getan, aber ich wäre ziemlich überrascht, wenn Java 8 Linux-Pakete JavaFX nicht enthalten würden, als Java 8 im März 2014 veröffentlicht wird." Sie müssen überrascht sein, da OpenJDK 8 OpenJFX nicht enthält.
2
Arch Linux hat auch Pakete für openjfx: archlinux.org/packages/?name=java-openjfx
Maciek Łoziński
2
@NoBugs Dies mag eine etwas zu späte Antwort sein, um nützlich zu sein, aber Ubuntu 14.04 enthält OpenJDK 8 nicht, weshalb Sie das entsprechende JFX-Paket nicht finden können. Ich kann mich nicht erinnern, welche Ubuntu-Version es eingeführt hat, aber es ist definitiv in Ubuntu 16.04 verfügbar - zusammen mit dem "openjfx" -Paket.
Mike Allen
50

Bei mir hat das geklappt.

$ sudo apt-get install openjfx
Vineel Kovvuri
quelle
3
Wahrscheinlich der einfachste Weg, um JavaFX zu Ihrem Linux JDK
hinzuzufügen
Obwohl dies für viele die richtige Antwort ist, bieten einige Betriebssysteme dieses Paket nicht an. Für diejenigen, die nicht webupd8 PPAfür Ubuntu und fedyDesktop Installer für Fedora sind, gibt es zwei schnelle Möglichkeiten, das neueste Oracle JDK / JRE einzurichten, das JavaFX enthält.
Tresf
3
Für Ubuntu 18.04 hängt es immer noch von Java 8 ab, aber die Standardeinstellung ist Java 10. Wenn Sie es installieren, erhalten Sie 2 Javas.
jgomo3
Laut Wie installiere ich openjfx zusammen mit openjdk-11? Für Java-Versionen 11+ können Sie zur Verwendung von JavaFX anstelle von apt-get install openjfx(was derzeit nur für Java 8 funktioniert) Anweisungen von der Website openjfx.io verwenden , auf der JavaFX als plattformspezifisches SDK als Nummer verfügbar ist von jmods und als eine Reihe von Artefakten in maven central. "
Jewelsea
Ein Debian openjfx-Paket wurde für OpenJDK-11 unter tracker.debian.org/pkg/openjfx veröffentlicht , also vielleicht diese Methode. sudo apt-get install openjfxwird weiterhin unterstützt und funktioniert für spätere JavaFX- und Ubuntu-Versionen. Beachten Sie, dass die Debian openjfx-Pakete anscheinend nicht so häufig aktualisiert werden wie die von openjfx.io verteilten Bibliotheken. Wenn Sie also die aktuellste Version verwenden möchten, ist es wahrscheinlich am besten, eine openjfx.io-Distribution zu verwenden.
Jewelsea
11

Als schnelle Lösung können Sie die JavaFX-Laufzeit-JAR-Datei und die Dateien kopieren, auf die von Oracle JRE (JDK) oder einer in sich geschlossenen Anwendung verwiesen wird , die JavaFX verwendet (z. B. 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/

Stellen Sie einfach sicher, dass Sie das GTK 2.18 oder höher haben

Максим Шатов
quelle
Ich kann nicht finden, wo openjfx in Ubuntu 18.04 installiert ist, aber ich habe diese Jars und andere Dateien von einem anderen Programm gestohlen, das auf meiner Festplatte installiert ist (Sie können etwas wie phpstorm oder clion überprüfen :)) und es hat wie ein Zauber funktioniert. Danke
Heichou
Ich habe die Dateien von JDK1.8.0_251 (Oracle Java 1.8) nach java-8-openjdk-amd64 (Ubuntu-Repository OpenJDK 8) kopiert. Konnte JAR-Dateien mit JavaFX immer noch nicht ausführen. Als ich jedoch einfach als externes Bibliotheksglas in meinem Eclipse-Erstellungspfad eine Verknüpfung zu jfxrt.jar herstellte, wurden Programme im Eclipse-Kontext ausgeführt. Das Ausführen von "apt-cache policy libgtk2.0-0" ergab "Installed: 2.24.32-1ubuntu1"
Phil Freihofner
7

Beantworten Sie auch diese Frage:

Wo kann ich vorgefertigte JavaFX-Bibliotheken für OpenJDK (Windows) erhalten?

Unter Linux ist das kein wirkliches Problem, aber unter Windows ist es nicht so einfach, besonders wenn Sie die JRE verteilen möchten.

Sie können OpenJFX mit OpenJDK 8 unter Windows verwenden, Sie müssen es nur selbst zusammenbauen:

Laden Sie das OpenJDK hier herunter: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

Laden Sie OpenJFX hier herunter: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

Kopieren Sie alle Dateien aus der OpenFX-Zip-Datei auf das JDK. Voila, Sie haben ein OpenJDK mit JavaFX.

Update :

Zum Glück gibt es von Azul jetzt einen OpenJDK + OpenJFX-Build, der auf der Community-Seite heruntergeladen werden kann: https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx

Mauli
quelle
Vielen Dank. Ich habe die AdoptOpenJDK-Github-Site überprüft, aber dort steht "Legacy-Repository". Wissen Sie, wo eine neuere passende OpenJFX-Binärdatei verfügbar ist, die den Builds des neuen Repos github.com/AdoptOpenJDK/openjdk8-binaries/releases entspricht ?
Houtman
3

Versuchen Sie es mit obuildfactory .

Es ist notwendig, diese Skripte zu ändern (enthält Fehler und macht nicht genau das "Ding", das erforderlich ist). Ich werde meine Skripte hochladen, die in den nächsten Tagen von obuildfactory gespalten wurden. und so werde ich auch meine antwort entsprechend aktualisieren.

Bis dahin viel Spaß, Sir :)

DeepSidhu1313
quelle
1
Leider gibt es kein Windows-Gegenstück für OpenJFX
madduci
0

Laut Oracle wird die Integration von OpenJDK & javaFX im ersten Quartal 2014 erfolgen (siehe Roadmap: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Für die erste Frage lautet die Antwort also, dass Sie bis dahin warten müssen. Für die 2. Frage gibt es keinen anderen Weg. Also, jetzt geh mit Java Swing oder starte JavaFX und warte

Stathis Andronikos
quelle
Der Link in Ihrer Antwort ist defekt. Die letzte
ILMostro_7
@ ILMostro_7 der Link in Ihrem Kommentar ist defekt
Blake
Es ist alt genug. Ich bin sicher, dass sie ihre Website ändern, wenn neue Pläne Gestalt annehmen.
ILMostro_7
Die folgende Site gibt an, dass javafx eine eigenständige Bibliothek sein wird, die mit Java-11 beginnt. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7