JavaFX和OpenJDK

mdr*_*sen 100 java openjdk javafx javafx-2

我正在尝试决定是否可以为Java应用程序的用户界面切换到JavaFX.我的大多数用户都会使用Oracle JRE,它最近集成了JavaFX.但是,有些人正在使用OpenJDK(在Linux上).这个(旧)问题表明OpenJDK与JavaFX的处理非常糟糕.根据这个问题,替代的OpenJFX只会在版本9中完全集成到OpenJDK中.所以我的问题有两个:

  • OpenJDK中的JavaFX支持是否仍然如此糟糕?
  • 如果是这样,是否有任何Linux发行版已经提供OpenJFX包,因此用户不必自己构建它

jew*_*sea 87

JavaFX是OpenJDK的一部分

JavaFX项目本身是开源的,是OpenJDK项目的一部分.

从OpenJDK存储库构建JavaFX

您可以从源代码完全构建OpenJDK(包括JavaFX)开放版本,版本不依赖于Oracle JDK或封闭源代码.

更新:使用从OpenJDK源预先构建的JavaFX分发

正如对这个问题的评论和另一个答案所述,Debian Linux发行版提供了基于OpenJDK的JavaFX二进制分发:

Open Java与Oracle JDK之间在JavaFX方面的差异

下面的信息为Java 8中提供从Java 9,VP6编码已被弃用为JavaFX甲骨文Webstart的/浏览器嵌入应用程序部署技术也已过时.因此,JavaFX的未来版本,即使它们由Oracle分发,也可能不包括任何非开源技术.

Oracle JDK包含一些OpenJDK无法使用的软件.有两个与JavaFX相关的主要组件.

  1. 由谷歌和谷歌拥有的ON2 VP6视频编解码器尚未开源.
  2. Oracle WebStart/Browser Embedded应用程序部署技术.

这意味着JavaFX的开放版本无法播放VP6 FLV文件.这不是一个很大的损失,因为很难找到VP6编码器或VP6中编码的媒体.

其他更常见的视频格式,例如H.264,可以使用JavaFX的开放版本进行播放(只要您在目标计算机上预先安装了相应的编解码器).

缺乏WebStart/Browser Embedded部署技术实际上与OpenJDK本身有关,而不是与JavaFX有关.此技术可用于部署非JavaFX应用程序.

如果OpenSource社区开发了一种用于Java(和其他软件)的部署技术,它完全取代了WebStart和Browser Embedded部署方法,那将会很棒,从而为应用程序分发提供了轻量级,低影响的用户体验.我相信已经有一些项目开始实现这一目标,但它们还没有达到很高的成熟度和采用水平.

就个人而言,我认为WebStart/Browser Embedded部署是传统技术,目前有更好的方法来部署许多JavaFX应用程序(例如自包含应用程序).

谁需要创建包含JavaFX的Linux OpenJDK发行版

由基于OpenJDK(例如Redhat,Ubuntu等)为Linux发行版创建包的人员可以为包含JavaFX的JDK和JRE创建RPM.那些软件分发者然后需要将生成的包放在他们的标准分发代码库中(例如fedora/red hat网络yum存储库).目前尚未完成,但如果2014年3月Java 8发布时,Java 8 Linux软件包不包含JavaFX,我会感到非常惊讶.

关于实质性应用部署的建议

我建议使用Java的自包含应用程序部署模式.

此部署模式的说明如下:

应用程序安装在本地驱动器上,并使用Java和JavaFX运行时的私有副本作为独立程序运行.可以使用与该操作系统的其他本机应用程序相同的方式启动应用程序,例如使用桌面快捷方式或菜单项.

您可以从Oracle JDK发行版或包含JavaFX的OpenJDK版本构建自包含的应用程序.目前使用Oracle JDK更容易实现.

由于Java的一个版本与您的应用程序捆绑在一起,您不必关心机器上预安装的Java版本,它具有哪些功能以及它是否与您的程序兼容.相反,您可以针对确切的Java运行时版本测试应用程序,并将其与您的应用程序一起分发.部署应用程序的用户体验与在其计算机上安装本机应用程序相同(例如,安装了Windows .exe或.msi,OS X .dmg,Linux .rpm或.deb).

更新,2018年4月:有关Oracle当前未来发展政策的信息

  • Debian现在有一个OpenJFX包:https://packages.qa.debian.org/o/openjfx.html (12认同)
  • "目前尚未完成,但如果2014年3月发布Java 8时,Java 8 Linux软件包不包含JavaFX,我会感到非常惊讶".你必须感到惊讶,因为OpenJDK 8不包括OpenJFX. (9认同)
  • 为此工作.sudo apt-get install openjfx (6认同)
  • Arch Linux还有openjfx的软件包:https://www.archlinux.org/packages/?name = java -openjfx (2认同)
  • @NoBugs这可能有点太迟了,但是Ubuntu 14.04不包含OpenJDK 8,这就是为什么你找不到相应的JFX包的原因.我不记得哪个Ubuntu版本引入了它,但它肯定可以在Ubuntu 16.04中使用 - 与"openjfx"软件包一起使用. (2认同)

Vin*_*uri 49

对我来说这很有效.

sudo apt-get install openjfx

  • 也许最简单的方法的JavaFX添加到您的Linux JDK (3认同)
  • 对于Ubuntu 18.04,它仍然依赖于Java 8,但默认的是Java 10.如果你安装它,你将最终得到2个javas. (3认同)

Мак*_*тов 11

作为一种快速解决方案,您可以复制JavaFX运行时JAR文件以及从Oracle JRE(JDK)或任何使用JavaFX的自包含应用程序(例如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/
Run Code Online (Sandbox Code Playgroud)

只要确保你有gtk 2.18或更高


Mau*_*uli 5

还回答这个问题:

在哪里可以获得针对OpenJDK的预构建JavaFX库(Windows)

在Linux上,这并不是真正的问题,但是在Windows上,并不是那么容易,特别是如果您要分发JRE。

实际上,您可以在Windows上将OpenJFX与OpenJDK 8一起使用,只需要自己组装即可:

从此处下载OpenJDK:https : //github.com/AdoptOpenJDK/openjdk8-releases/releases/tag/jdk8u172-b11

从此处下载OpenJFX:https : //github.com/SkyLandTW/OpenJFX-binary-windows/releases/tag/v8u172-b11

从JDK顶部的OpenFX zip中复制所有文件,瞧,您有一个带有JavaFX的OpenJDK。

更新

幸运的是,Azul现在提供了一个OpenJDK + OpenJFX构建,可以在其社区页面上下载:https : //www.azul.com/downloads/zulu-community/?& version=java-8-lts&os=windows&package=jdk-fx