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 ?
Respuestas:
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:
Instalar a través de:
(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.
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:
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
fuente
Para mí esto funcionó.
fuente
webupd8 PPA
para Ubuntu y elfedy
instalador de escritorio para Fedora, hay dos formas rápidas de configurar el último Oracle JDK / JRE que incluye JavaFX.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. ".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.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 ):
solo asegúrate de tener el gtk 2.18 o superior
fuente
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
fuente
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 :)
fuente
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
fuente