JavaFX y OpenJDK

109

Estoy tratando de decidir si puedo cambiar a JavaFX para la interfaz de usuario de mi aplicación Java. La mayoría de mis usuarios usarían Oracle JRE, que tiene JavaFX integrado en estos días. Sin embargo, algunos están usando OpenJDK (en linux). Esta (antigua) pregunta sugiere que OpenJDK maneja muy mal JavaFX. Según esta pregunta, la alternativa OpenJFX solo se integrará completamente en OpenJDK en la versión 9. Entonces mi pregunta es doble:

  • ¿Sigue siendo tan malo el soporte de JavaFX en OpenJDK?
  • Si es así, ¿hay alguna distribución de Linux que ya ofrezca un paquete OpenJFX para que los usuarios no tengan que construirlo ellos mismos ?
mdriesen
fuente
¿Cuál es el modo de ejecución de la aplicación (¿cómo se implementa?)
jewelsea
@jewelsea Se ejecuta como un programa independiente.
mdriesen
@docM ¿sería una solución cambiar a oracle- (sun) -jdk para las máquinas ubuntu? webupd8.org/2012/01/…
nyyrikki
@nyyrikki Esa es una opción. Pero prefiero quedarme con Java Swing si JavaFX y OpenJDK no se mezclan.
mdriesen
2
@Yngve Porté todo a JavaFX cuando Ubuntu y Debian comenzaron a incluir los paquetes.
mdriesen

Respuestas:

99

JavaFX es parte de OpenJDK

El proyecto JavaFX en sí es de código abierto y es parte del proyecto OpenJDK .

Actualización dic 2019

Para obtener información actualizada sobre cómo utilizar JavaFX de código abierto, visite https://openjfx.io . Esto incluye instrucciones sobre el uso de JavaFX como una biblioteca modular a la que se accede desde un JDK existente (como una instalación de Open JDK ).

El repositorio de código fuente abierto para JavaFX se encuentra en https://github.com/openjdk/jfx .

En la ubicación de origen vinculada, puede encontrar archivos de licencia para JavaFX abierto (actualmente esta licencia coincide con la licencia para OpenJDK: excepción de classpath de GPL +).

La wiki del proyecto se encuentra en: https://wiki.openjdk.java.net/display/OpenJFX/Main

Si desea comenzar rápidamente a usar JavaFX abierto, las distribuciones de Belsoft Liberica JDK proporcionan binarios prediseñados de OpenJDK que (actualmente) incluyen JavaFX abierto para una variedad de plataformas.

Para su distribución como aplicaciones independientes, Java 14 está programado para implementar JEP 343: Packaging Tool , que "Admite formatos de empaque nativos para brindar a los usuarios finales una experiencia de instalación natural. Estos formatos incluyen msi y exe en Windows, pkg y dmg en macOS , y deb y rpm en Linux. ", para la implementación de aplicaciones basadas en OpenJFX con instaladores nativos y sin dependencias de plataforma adicionales (como un JDK preinstalado).


Información más antigua que puede quedar desactualizada con el tiempo.

Construyendo JavaFX desde el repositorio OpenJDK

Puede crear una versión abierta de OpenJDK (incluido JavaFX) completamente desde la fuente que no tiene dependencias en Oracle JDK o código fuente cerrado.

Actualización: uso de una distribución JavaFX predefinida a partir de fuentes OpenJDK

Como se señaló en los comentarios a esta pregunta y en otra respuesta, las distribuciones de Debian Linux ofrecen una distribución binaria JavaFX basada en OpenJDK:

(actualmente esto solo funciona para Java 8 hasta donde yo sé).

Diferencias entre Open JDK y Oracle JDK con respecto a JavaFX

La siguiente información se proporcionó para Java 8. A partir de Java 9, la codificación VP6 está en desuso para JavaFX y la tecnología de implementación de aplicaciones integradas Oracle WebStart / Browser también está en desuso . Así que las versiones futuras de JavaFX, incluso si son distribuidas por Oracle, probablemente no incluirán ninguna tecnología que no sea de código abierto.

Oracle JDK incluye algún software que no se puede utilizar desde OpenJDK. Hay dos componentes principales que se relacionan con JavaFX.

  1. El códec de video ON2 VP6, que es propiedad de Google y Google, no es de código abierto.
  2. La tecnología de implementación de aplicaciones Oracle WebStart / Browser Embedded.

Esto significa que una versión abierta de JavaFX no puede reproducir archivos FLV VP6. Esto no es una gran pérdida, ya que es difícil encontrar codificadores VP6 o medios codificados en VP6.

Otros formatos de video más comunes, como H.264, se reproducirán bien con una versión abierta de JavaFX (siempre que tenga los códecs adecuados preinstalados en la máquina de destino).

La falta de tecnología de implementación WebStart / Browser Embedded es realmente algo que ver con el propio OpenJDK en lugar de JavaFX específicamente. Esta tecnología se puede utilizar para implementar aplicaciones que no sean JavaFX.

Sería genial si la comunidad OpenSource desarrollara una tecnología de implementación para Java (y otro software) que reemplazara por completo los métodos de implementación WebStart y Browser Embedded, permitiendo una experiencia de usuario agradable, liviana y de bajo impacto para la distribución de aplicaciones. Creo que se han iniciado algunos proyectos para cumplir con ese objetivo, pero aún no han alcanzado un alto nivel de madurez y adopción.

Personalmente, creo que las implementaciones de WebStart / Browser Embedded son tecnología heredada y actualmente existen mejores formas de implementar muchas aplicaciones JavaFX (como aplicaciones autónomas).

Actualización de diciembre de 2019:

Se ha desarrollado una versión de código abierto de WebStart para JDK 11+ y está disponible en https://openwebstart.com .

¿Quién necesita crear distribuciones Linux OpenJDK que incluyan JavaFX?

Depende de las personas que crean paquetes para distribuciones de Linux basadas en OpenJDK (por ejemplo, Redhat, Ubuntu, etc.) para crear RPM para JDK y JRE que incluyen JavaFX. Esos distribuidores de software necesitan colocar los paquetes generados en sus repositorios de código de distribución estándar (por ejemplo, repositorios yum de fedora / red hat network). Actualmente, esto no se está haciendo, pero me sorprendería bastante si los paquetes de Java 8 Linux no incluyeran JavaFX cuando se lanzó Java 8 en marzo de 2014.

Actualización, diciembre de 2019 :

Ahora que JavaFX se ha separado de la mayoría de las distribuciones binarias de JDK y JRE (incluida la distribución de Oracle) y, en cambio, está disponible como un SDK independiente, un conjunto de jmods o como dependencias de biblioteca disponibles en el repositorio central de Maven (como se describe a continuación). https://openjfx.io ), hay menos necesidad de distribuciones estándar de Linux OpenJDK para incluir JavaFX.

Si desea un JDK prediseñado que incluya JavaFX, considere las distribuciones de Liberica JDK , que se proporcionan para una variedad de plataformas.

Asesoramiento sobre la implementación de aplicaciones importantes

Aconsejo usar el modo de implementación de aplicaciones autónomas de Java .

Una descripción de este modo de implementación es:

La aplicación se instala en la unidad local y se ejecuta como un programa independiente utilizando una copia privada de los tiempos de ejecución de Java y JavaFX. La aplicación se puede iniciar de la misma manera que otras aplicaciones nativas para ese sistema operativo, por ejemplo, utilizando un acceso directo del escritorio o una entrada de menú.

Puede crear una aplicación autónoma desde la distribución de Oracle JDK o desde una versión de OpenJDK que incluye JavaFX. Actualmente es más fácil hacerlo con Oracle JDK.

Como una versión de Java está incluida con su aplicación, no tiene que preocuparse por qué versión de Java puede haber sido preinstalada en la máquina, qué capacidades tiene y si es o no compatible con su programa. En su lugar, puede probar su aplicación con una versión exacta de tiempo de ejecución de Java y distribuirla con su aplicación. La experiencia del usuario para implementar su aplicación será la misma que instalar una aplicación nativa en su máquina (por ejemplo, un .exe o .msi de Windows instalado, un .dmg de OS X, un .rpm o .deb de Linux).

Nota: La función de aplicación autónoma solo estaba disponible para Java 8 y 9, y no para Java 10-13. Está previsto que Java 14, a través de JEP 343: Packaging Tool , vuelva a ofrecer soporte para esta función de las distribuciones OpenJDK.

Actualización, abril de 2018: información sobre la política actual de Oracle hacia desarrollos futuros

joya
fuente
@Emmanuel, Gracias por tu trabajo en esto. JavaFX es parte del JDK, así que (al menos hasta que el JDK se modularice) no estoy seguro de por qué habría un paquete OpenJFX separado en lugar de incluir todos los archivos de tiempo de ejecución necesarios en el paquete OpenJDK estándar (como se hace con el Distribuciones de Oracle JDK). La lista de correo open-jfx sería un buen lugar si se requiere más discusión.
Jewelsea
Un paquete separado brinda un grado de flexibilidad si alguien está interesado en el JDK pero no en JavaFX. ¿No es la modularización un objetivo para Java 9 después de todo? :)
Emmanuel Bourg
11
"Actualmente, esto no se está haciendo, pero me sorprendería bastante si los paquetes de Java 8 Linux no incluyeran JavaFX cuando Java 8 se lanzó en marzo de 2014". Debe sorprenderse ya que OpenJDK 8 no incluye OpenJFX.
2
Arch Linux tiene paquetes para openjfx: archlinux.org/packages/?name=java-openjfx
Maciek Lozinski
2
@NoBugs Esta puede ser una respuesta un poco tardía para ser útil, pero Ubuntu 14.04 no incluye OpenJDK 8, por lo que no puede encontrar el paquete JFX correspondiente. No recuerdo qué versión de Ubuntu lo introdujo, pero definitivamente está disponible en Ubuntu 16.04, junto con el paquete "openjfx".
Mike Allen
50

Para mí esto funcionó.

$ sudo apt-get install openjfx
Vineel Kovvuri
fuente
3
Probablemente la forma más fácil de agregar JavaFX a su JDK de Linux
Reimeus
Aunque esta es la respuesta correcta para muchos, algunos sistemas operativos no proporcionan este paquete. Para aquellos que no lo hacen webupd8 PPApara Ubuntu y el fedyinstalador de escritorio para Fedora, hay dos formas rápidas de configurar el último Oracle JDK / JRE que incluye JavaFX.
tresf
3
Para Ubuntu 18.04, todavía depende de Java 8, pero el predeterminado es java 10. Si lo instalas, terminarás con 2 javas.
jgomo3
De acuerdo con ¿Cómo instalar openjfx junto con openjdk-11? , para las versiones 11+ de Java, para usar JavaFX, en lugar de apt-get install openjfx(que actualmente funciona solo para Java 8), puede usar las instrucciones del sitio web openjfx.io , donde JavaFX está "disponible como un SDK específico de la plataforma, como un número de jmods, y como un conjunto de artefactos en maven central. ".
jewelsea
Se ha publicado un paquete Debian openjfx para OpenJDK-11 en tracker.debian.org/pkg/openjfx , así que quizás este método. sudo apt-get install openjfx, seguirá siendo compatible y funcionará para versiones posteriores de JavaFX y ubuntu. Tenga en cuenta que los paquetes Debian openjfx no parecen actualizarse con tanta frecuencia como las bibliotecas distribuidas por openjfx.io, por lo que si desea utilizar la versión más actualizada, probablemente sea mejor que utilice una distribución openjfx.io.
jewelsea
11

Como solución rápida, puede copiar el archivo JAR en tiempo de ejecución de JavaFX y los referenciados desde Oracle JRE (JDK) o cualquier aplicación autónoma que utilice JavaFX (por ejemplo, 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/

solo asegúrate de tener el gtk 2.18 o superior

Максим Шатов
fuente
No puedo encontrar dónde está instalado openjfx en Ubuntu 18.04, pero robé estos frascos y otros archivos de otro programa instalado en mi disco duro (puede verificar algo como phpstorm o clion :)) y funcionó a la perfección. Gracias
Heichou
Copié los archivos de JDK1.8.0_251 (Oracle Java 1.8) a java-8-openjdk-amd64 (repositorio de ubuntu OpenJDK 8). Todavía no podía ejecutar archivos jar con JavaFX. Pero cuando simplemente me vinculé a jfxrt.jar como un contenedor de biblioteca externa en mi ruta de compilación de Eclipse, los programas se ejecutaron dentro del contexto de Eclipse. Ejecutando "apt-cache policy libgtk2.0-0" dio "Instalado: 2.24.32-1ubuntu1"
Phil Freihofner
7

También respondiendo a esta pregunta:

¿Dónde puedo obtener bibliotecas JavaFX preconstruidas para OpenJDK (Windows)?

En Linux no es realmente un problema, pero en Windows no es tan fácil, especialmente si quieres distribuir el JRE.

De hecho, puede usar OpenJFX con OpenJDK 8 en Windows, solo tiene que ensamblarlo usted mismo:

Descargue OpenJDK desde aquí: https://github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

Descarga OpenJFX desde aquí: https://github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

copie todos los archivos del zip OpenFX en la parte superior del JDK, listo, tiene un OpenJDK con JavaFX.

Actualización :

Afortunadamente, de Azul ahora hay una compilación OpenJDK + OpenJFX que se puede descargar en la página de su comunidad: https://www.azul.com/downloads/zulu-community/?&version=java-8-lts&os=windows&package=jdk-fx

Mauli
fuente
Gracias. Revisé el sitio github de AdoptOpenJDK pero dice "repositorio heredado". ¿Sabe dónde está disponible un binario OpenJFX coincidente más nuevo que coincida con las compilaciones del nuevo repositorio github.com/AdoptOpenJDK/openjdk8-binaries/releases ?
Houtman
3

Prueba obuildfactory .

Es necesario modificar estos scripts (contiene un error y no hace exactamente lo "necesario"), subiré los scripts míos bifurcados de obuildfactory en los próximos días. y así también actualizaré mi respuesta en consecuencia.

Hasta entonces, disfrute, señor :)

DeepSidhu1313
fuente
1
desafortunadamente no hay contraparte de Windows para
OpenJFX
0

Según Oracle, la integración de OpenJDK y javaFX estará disponible en el primer trimestre de 2014 (consulte la hoja de ruta: http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html ). Entonces, para la primera pregunta, la respuesta es que debes esperar hasta entonces. Para la segunda pregunta no hay otra forma. Entonces, por ahora, vaya con java swing o inicie javaFX y espere

Stathis Andronikos
fuente
el enlace en su respuesta está roto. Lo último
ILMostro_7
@ ILMostro_7 el enlace en su comentario está roto
Blake
Tiene edad suficiente. Estoy seguro de que cambiarán su sitio a medida que vayan tomando forma los nuevos planes.
ILMostro_7
El siguiente sitio indica que javafx será una biblioteca independiente a partir de java-11. oracle.com/technetwork/java/java-se-support-roadmap.html
ILMostro_7