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 ?
Antworten:
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:
Installation über:
(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.
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:
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
quelle
Bei mir hat das geklappt.
quelle
webupd8 PPA
für Ubuntu undfedy
Desktop Installer für Fedora sind, gibt es zwei schnelle Möglichkeiten, das neueste Oracle JDK / JRE einzurichten, das JavaFX enthält.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. "sudo apt-get install openjfx
wird 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.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 ):
Stellen Sie einfach sicher, dass Sie das GTK 2.18 oder höher haben
quelle
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
quelle
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 :)
quelle
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
quelle