JavaFX et OpenJDK

109

J'essaie de décider si je pourrais passer à JavaFX pour l'interface utilisateur de mon application Java. La plupart de mes utilisateurs utiliseraient Oracle JRE, qui intègre JavaFX ces jours-ci. Cependant, certains utilisent OpenJDK (sous Linux). Cette (ancienne) question suggère qu'OpenJDK traite très mal JavaFX. Selon cette question, l'alternative OpenJFX ne sera pleinement intégrée à OpenJDK qu'en version 9. Ma question est donc double:

  • La prise en charge de JavaFX dans OpenJDK est-elle toujours aussi mauvaise?
  • Si tel est le cas, existe-t-il des distributions Linux qui proposent déjà un package OpenJFX pour que les utilisateurs n'aient pas à le créer eux - mêmes ?
mdriesen
la source
Quel est le mode d'exécution de votre application (comment est-elle déployée?)
Jewelsea
@jewelsea Il fonctionne comme un programme autonome.
mdriesen
@docM serait-il une solution de passer à l'oracle- (sun) -jdk pour les machines ubuntu? webupd8.org/2012/01/…
nyyrikki
@nyyrikki C'est une option. Mais je préfère m'en tenir à Java Swing si JavaFX et OpenJDK ne se mélangent pas.
mdriesen le
2
@Yngve J'ai tout porté sur JavaFX quand Ubuntu et Debian ont commencé à inclure les paquets.
mdriesen le

Réponses:

99

JavaFX fait partie d'OpenJDK

Le projet JavaFX lui-même est open source et fait partie du projet OpenJDK .

Mise à jour déc.2019

Pour obtenir des informations actuelles sur l'utilisation d'Open Source JavaFX, visitez https://openjfx.io . Cela inclut des instructions sur l'utilisation de JavaFX en tant que bibliothèque modulaire accessible à partir d'un JDK existant (comme une installation Open JDK ).

Le référentiel de code open source pour JavaFX se trouve à l' adresse https://github.com/openjdk/jfx .

À l'emplacement source lié, vous pouvez trouver des fichiers de licence pour JavaFX ouvert (actuellement, cette licence correspond à la licence pour OpenJDK: exception de chemin de classe GPL +).

Le wiki du projet se trouve à l' adresse : https://wiki.openjdk.java.net/display/OpenJFX/Main

Si vous souhaitez un démarrage rapide de l'utilisation de JavaFX ouvert, les distributions Belsoft Liberica JDK fournissent des binaires pré-construits d'OpenJDK qui (actuellement) incluent JavaFX ouvert pour une variété de plates-formes.

Pour la distribution en tant qu'applications autonomes, Java 14 devrait implémenter JEP 343: Packaging Tool , qui «prend en charge les formats de packaging natifs pour offrir aux utilisateurs finaux une expérience d'installation naturelle. Ces formats incluent msi et exe sous Windows, pkg et dmg sous macOS , et deb et rpm sur Linux. ", pour le déploiement d'applications basées sur OpenJFX avec des programmes d'installation natifs et sans dépendances de plate-forme supplémentaires (comme un JDK préinstallé).


Informations plus anciennes qui peuvent devenir obsolètes avec le temps

Construction de JavaFX à partir du référentiel OpenJDK

Vous pouvez créer une version ouverte d'OpenJDK (y compris JavaFX) entièrement à partir de la source qui n'a aucune dépendance sur le JDK Oracle ou le code source fermé.

Mise à jour: utilisation d'une distribution JavaFX pré-construite à partir de sources OpenJDK

Comme indiqué dans les commentaires de cette question et dans une autre réponse, les distributions Debian Linux offrent une distribution binaire JavaFX basée sur OpenJDK:

(actuellement cela ne fonctionne que pour Java 8 pour autant que je sache).

Différences entre Open JDK et Oracle JDK par rapport à JavaFX

Les informations suivantes ont été fournies pour Java 8. À partir de Java 9, le codage VP6 est déconseillé pour JavaFX et la technologie de déploiement d'applications intégrées Oracle WebStart / Browser est également déconseillée . Ainsi, les futures versions de JavaFX, même si elles sont distribuées par Oracle, n'incluront probablement aucune technologie qui ne soit pas open source.

Oracle JDK comprend certains logiciels qui ne sont pas utilisables à partir d'OpenJDK. Il existe deux composants principaux liés à JavaFX.

  1. Le codec vidéo ON2 VP6, qui appartient à Google et Google n'a pas de source ouverte.
  2. La technologie de déploiement d'applications Oracle WebStart / Browser Embedded.

Cela signifie qu'une version ouverte de JavaFX ne peut pas lire les fichiers VP6 FLV. Ce n'est pas une grosse perte car il est difficile de trouver des encodeurs VP6 ou des supports encodés en VP6.

D'autres formats vidéo plus courants, tels que H.264, pourront être lus correctement avec une version ouverte de JavaFX (tant que vous avez les codecs appropriés préinstallés sur la machine cible).

L'absence de technologie de déploiement WebStart / Browser Embedded est vraiment quelque chose à voir avec OpenJDK lui-même plutôt qu'avec JavaFX en particulier. Cette technologie peut être utilisée pour déployer des applications non JavaFX.

Ce serait formidable si la communauté OpenSource développait une technologie de déploiement pour Java (et d'autres logiciels) qui remplaçait complètement les méthodes de déploiement WebStart et Browser Embedded, permettant une belle expérience utilisateur légère et à faible impact pour la distribution d'applications. Je crois que certains projets ont commencé à servir un tel objectif, mais ils n'ont pas encore atteint un niveau élevé de maturité et d'adoption.

Personnellement, je pense que les déploiements WebStart / Browser Embedded sont une technologie héritée et qu'il existe actuellement de meilleures façons de déployer de nombreuses applications JavaFX (telles que des applications autonomes).

Mise à jour de décembre 2019:

Une version open source de WebStart pour JDK 11+ a été développée et est disponible sur https://openwebstart.com .

Qui a besoin de créer des distributions Linux OpenJDK qui incluent JavaFX

Il appartient aux personnes qui créent des packages pour les distributions Linux basées sur OpenJDK (par exemple Redhat, Ubuntu, etc.) de créer des RPM pour le JDK et le JRE qui incluent JavaFX. Ces distributeurs de logiciels doivent ensuite placer les packages générés dans leurs référentiels de code de distribution standard (par exemple, les référentiels fedora / red hat network yum). Actuellement, cela n'est pas fait, mais je serais assez surpris si les packages Java 8 Linux n'incluaient pas JavaFX lors de la sortie de Java 8 en mars 2014.

Mise à jour, décembre 2019 :

Maintenant que JavaFX a été séparé de la plupart des distributions binaires JDK et JRE (y compris la distribution d'Oracle) et est, à la place, disponible en tant que SDK autonome, ensemble de jmods ou en tant que dépendances de bibliothèque disponibles à partir du référentiel central Maven (comme indiqué comme suit: https://openjfx.io ), il est moins nécessaire que les distributions Linux OpenJDK standard incluent JavaFX.

Si vous voulez un JDK pré-construit qui inclut JavaFX, pensez aux distributions Liberica JDK , qui sont fournies pour une variété de plates-formes.

Conseils sur le déploiement pour des applications importantes

Je vous conseille d'utiliser le mode de déploiement d' application autonome de Java .

Une description de ce mode de déploiement est:

L'application est installée sur le lecteur local et s'exécute en tant que programme autonome à l'aide d'une copie privée des environnements d'exécution Java et JavaFX. L'application peut être lancée de la même manière que d'autres applications natives pour ce système d'exploitation, par exemple à l'aide d'un raccourci sur le bureau ou d'une entrée de menu.

Vous pouvez créer une application autonome à partir de la distribution Oracle JDK ou d'une version OpenJDK qui inclut JavaFX. Il est actuellement plus facile de le faire avec un JDK Oracle.

Comme une version de Java est fournie avec votre application, vous n'avez pas à vous soucier de la version de Java qui a pu être préinstallée sur la machine, de ses capacités et de sa compatibilité ou non avec votre programme. Au lieu de cela, vous pouvez tester votre application par rapport à une version d'exécution Java exacte et la distribuer avec votre application. L'expérience utilisateur pour déployer votre application sera la même que pour installer une application native sur leur machine (par exemple un windows .exe ou .msi installé, un OS X .dmg, un linux .rpm ou .deb).

Remarque: la fonction d'application autonome n'était disponible que pour Java 8 et 9, et non pour Java 10-13. Java 14, via JEP 343: Packaging Tool , devrait à nouveau fournir la prise en charge de cette fonctionnalité à partir des distributions OpenJDK.

Mise à jour, avril 2018: Informations sur la politique actuelle d'Oracle envers les développements futurs

Jewelsea
la source
@Emmanuel, merci pour votre travail à ce sujet. JavaFX fait partie du JDK, donc (au moins jusqu'à ce que le JDK devienne modulaire) je ne sais pas pourquoi il y aurait un package OpenJFX séparé au lieu d'inclure tous les fichiers d'exécution nécessaires dans le package OpenJDK standard (comme c'est le cas avec le Distributions Oracle JDK). La liste de diffusion open-jfx serait un bon endroit si une discussion plus approfondie est nécessaire.
jewelsea
Un package séparé donne une certaine flexibilité si quelqu'un s'intéresse au JDK mais pas à JavaFX. La modularisation n'est-elle pas un objectif pour Java 9 après tout? :)
Emmanuel Bourg
11
"Actuellement, cela n'est pas fait, mais je serais assez surpris si les packages Java 8 Linux n'incluaient pas JavaFX lors de la sortie de Java 8 en mars 2014". Vous devez être surpris car OpenJDK 8 n'inclut pas OpenJFX.
2
Arch Linux a également des packages pour openjfx: archlinux.org/packages/?name=java-openjfx
Maciek Łoziński
2
@NoBugs Cela peut être une réponse un peu trop tardive pour être utile, mais Ubuntu 14.04 n'inclut pas OpenJDK 8, c'est pourquoi vous ne trouvez pas le package JFX correspondant. Je ne me souviens pas quelle version d'Ubuntu l'a introduit, mais il est définitivement disponible dans Ubuntu 16.04 - avec le paquet "openjfx".
Mike Allen
50

Pour moi, cela a fonctionné.

$ sudo apt-get install openjfx
Vineel Kovvuri
la source
3
Probablement le moyen le plus simple d'ajouter JavaFX à votre JDK Linux
Reimeus
Bien que ce soit la bonne réponse pour beaucoup, certains systèmes d'exploitation ne fournissent pas ce package. Pour ceux qui n'ont pas webupd8 PPAUbuntu et le programme fedyd'installation de bureau pour Fedora, il existe deux moyens rapides de configurer le dernier Oracle JDK / JRE qui inclut JavaFX.
tresf
3
Pour Ubuntu 18.04, cela dépend toujours de Java 8, mais celui par défaut est java 10. Si vous l'installez, vous vous retrouverez avec 2 javas.
jgomo3
Selon Comment installer openjfx avec openjdk-11? , pour les versions 11+ de Java, pour utiliser JavaFX, plutôt que apt-get install openjfx(qui ne fonctionne actuellement que pour Java 8), vous pouvez utiliser les instructions du site Web openjfx.io , où JavaFX est "disponible en tant que SDK spécifique à la plate-forme, sous forme de numéro de jmods, et comme un ensemble d'artefacts dans maven central. ".
jewelsea
Un paquet Debian openjfx a été publié pour OpenJDK-11 sur tracker.debian.org/pkg/openjfx , donc peut-être cette méthode. sudo apt-get install openjfx, continuera à être pris en charge et fonctionnera pour les versions ultérieures de JavaFX et ubuntu. Notez que les paquets Debian openjfx ne semblent pas être mis à jour aussi fréquemment que les bibliothèques distribuées par openjfx.io, donc si vous souhaitez utiliser la version la plus récente, vous feriez probablement mieux d'utiliser une distribution openjfx.io.
jewelsea le
11

Comme solution rapide, vous pouvez copier le fichier JAR d'exécution JavaFX et ceux référencés à partir d' Oracle JRE (JDK) ou de toute application autonome utilisant JavaFX (par exemple 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/

assurez- vous simplement d' avoir le gtk 2.18 ou supérieur

Максим Шатов
la source
Je ne peux pas trouver où openjfx est installé dans Ubuntu 18.04, mais j'ai volé ces jars et autres fichiers d'un autre programme installé sur mon disque dur (vous pouvez vérifier quelque chose comme phpstorm ou clion :)) et cela a fonctionné comme un charme. Merci
Heichou
J'ai copié les fichiers de JDK1.8.0_251 (Oracle Java 1.8) vers java-8-openjdk-amd64 (référentiel ubuntu OpenJDK 8). Impossible d'exécuter les fichiers JAR avec JavaFX. Mais lorsque j'ai simplement lié au jfxrt.jar en tant que fichier jar de bibliothèque externe dans mon chemin de construction Eclipse, les programmes s'exécutaient dans le contexte Eclipse. L'exécution de "apt-cache policy libgtk2.0-0" a donné "Installé: 2.24.32-1ubuntu1"
Phil Freihofner
7

Répondant également à cette question:

Où puis-je obtenir des bibliothèques JavaFX prédéfinies pour OpenJDK (Windows)

Sous Linux, ce n'est pas vraiment un problème, mais sous Windows, ce n'est pas si simple, surtout si vous voulez distribuer le JRE.

Vous pouvez en fait utiliser OpenJFX avec OpenJDK 8 sous Windows, il vous suffit de l'assembler vous-même:

Téléchargez l'OpenJDK à partir d'ici: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

Téléchargez OpenJFX à partir d'ici: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

copiez tous les fichiers du zip OpenFX sur le dessus du JDK, voila, vous avez un OpenJDK avec JavaFX.

Mise à jour :

Heureusement d'Azul, il existe maintenant une version OpenJDK + OpenJFX qui peut être téléchargée sur leur page de communauté: https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx

Mauli
la source
Merci. J'ai vérifié le site github AdoptOpenJDK mais il dit "dépôt hérité". Savez-vous où un binaire OpenJFX correspondant plus récent est disponible correspondant aux versions du nouveau référentiel github.com/AdoptOpenJDK/openjdk8-binaries/releases ?
Houtman
3

Essayez obuildfactory .

Il est nécessaire de modifier ces scripts (contient une erreur et ne fait pas exactement la "chose" requise), je téléchargerai les scripts de mine provenant d'obuildfactory dans les prochains jours. et donc je mettrai également à jour ma réponse en conséquence.

Jusque-là, profitez-en, monsieur :)

DeepSidhu1313
la source
1
Malheureusement, il n'y a pas d'équivalent Windows pour OpenJFX
madduci
0

Selon Oracle, l'intégration d'OpenJDK et de javaFX aura lieu au T1-2014 (voir la feuille de route: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Donc, pour la première question, la réponse est qu'il faut attendre jusque-là. Pour la 2ème question, il n'y a pas d'autre moyen. Alors, pour l'instant, allez avec java swing ou démarrez javaFX et attendez

Stathis Andronikos
la source
le lien dans votre réponse est rompu. La chose ferme à laquelle je suis arrivé sur une page similaire est oracle.com/us/corporate/press/1854982
ILMostro_7
@ ILMostro_7 le lien dans votre commentaire est cassé
Blake
C'est assez vieux. Je suis sûr qu'ils changent de site à mesure que de nouveaux plans prennent forme.
ILMostro_7
Le site suivant indique que javafx sera une bibliothèque autonome commençant par java-11. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7