我正在尝试决定是否可以为Java应用程序的用户界面切换到JavaFX . 我的大多数用户都会使用Oracle JRE,它最近集成了JavaFX . 但是,有些人正在使用OpenJDK(在Linux上) . This(旧)问题表明OpenJDK与JavaFX的处理非常糟糕 . 根据this问题,替代OpenJFX只会在版本9中完全集成到OpenJDK中 . 所以我的问题有两个:
-
OpenJDK中的JavaFX支持是否仍然如此糟糕?
-
如果是这样,是否有任何Linux发行版已经提供OpenJFX包,所以用户不必build it themselves?
6 回答
JavaFX is part of OpenJDK
JavaFX项目本身是open source,是part of the OpenJDK project .
Building JavaFX from the OpenJDK repository
您可以完全从源构建open version of OpenJDK (including JavaFX),它不依赖于Oracle JDK或封闭源代码 .
Update: Using a JavaFX distribution pre-built from OpenJDK sources
正如对这个问题的评论和另一个答案所述,Debian Linux发行版提供了基于OpenJDK的JavaFX二进制分发:
https://packages.qa.debian.org/o/openjfx.html
安装途径:
Differences between Open JDK and Oracle JDK with respect to JavaFX
为Java 8提供了以下信息 . 从Java 9开始,VP6 encoding is deprecated for JavaFX和Oracle WebStart/Browser embedded application deployment technology is also deprecated . 因此,JavaFX的未来版本,即使它们由Oracle分发,也可能不包括任何非开源技术 .
Oracle JDK包含一些OpenJDK无法使用的软件 . 有两个与JavaFX相关的主要组件 .
由谷歌和谷歌拥有的ON2 VP6视频编解码器尚未开源 .
Oracle WebStart / Browser嵌入式应用程序部署技术 .
这意味着JavaFX的开放版本无法播放VP6 FLV文件 . 这不是一个很大的损失,因为很难找到VP6编码器或VP6中编码的媒体 .
其他更常见的视频格式,例如H.264,可以使用JavaFX的开放版本进行播放(只要您在目标计算机上预先安装了相应的编解码器) .
缺乏WebStart / Browser Embedded部署技术实际上与OpenJDK本身有关,而不是与JavaFX有关 . 此技术可用于部署非JavaFX应用程序 .
如果OpenSource社区开发了一种用于Java(和其他软件)的部署技术,它完全取代了WebStart和Browser Embedded部署方法,那将会很棒,从而为应用程序分发提供了轻量级,低影响的用户体验 . 我相信已经有一些项目开始实现这一目标,但它们还没有达到很高的成熟度和采用水平 .
就个人而言,我认为WebStart / Browser Embedded部署是传统技术,目前有更好的方法来部署许多JavaFX应用程序(例如自包含应用程序) .
Who needs to create Linux OpenJDK Distributions which include JavaFX
根据OpenJDK(例如Redhat,Ubuntu等)为Linux发行版创建包的人员可以为包含JavaFX的JDK和JRE创建RPM . 那些软件分发者然后需要将生成的包放在他们的标准分发代码库中(例如fedora / red hat network yum repositories) . 目前尚未完成,但如果2014年3月Java 8发布时,Java 8 Linux软件包不包含JavaFX,我会感到非常惊讶 .
Advice on Deployment for Substantial Applications
我建议使用Java的self-contained application部署模式 .
此部署模式的说明如下:
您可以从Oracle JDK发行版或包含JavaFX的OpenJDK版本构建自包含的应用程序 . 目前使用Oracle JDK更容易实现 .
由于Java的一个版本与您的应用程序捆绑在一起,您不必关心机器上预安装的Java版本,它具有哪些功能以及它是否与您的程序兼容 . 相反,您可以针对确切的Java运行时版本测试应用程序,并将其与您的应用程序一起分发 . 部署应用程序的用户体验与在其计算机上安装本机应用程序相同(例如,安装了Windows .exe或.msi,OS X .dmg,Linux .rpm或.deb) .
Update, April 2018: Information on Oracle's current policy towards future developments
产品管理高级总监唐纳德史密斯
The Future of JavaFX and Other Java Client Roadmap Updates甲骨文 .
Java Client Roadmap Update - March 2018 Oracle白皮书 .
对我来说这很有效 .
作为一种快速解决方案,您可以复制JavaFX运行时JAR文件以及从Oracle JRE(JDK)引用的文件或任何使用JavaFX的自包含应用程序(例如JavaFX Scene Builder 2.0):
只是make sure你有gtk 2.18或更高
试试obuildfactory .
需要修改这些脚本(包含错误,并没有完全按照要求做的“事情”),我将在未来几天上传从obuildfactory分叉的我的脚本 . 所以我也会相应地更新我的答案 .
直到那时享受,先生:)
还回答了这个问题:
Where can I get pre-built JavaFX libraries for OpenJDK (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 .
根据Oracle OpenJDK和javaFX的集成将于2014年第一季度开始(参见路线图:http://www.oracle.com/technetwork/java/javafx/overview/roadmap-1446331.html) . 所以,对于第一个问题,答案是你必须等到那时 . 对于第二个问题,没有别的办法 . 那么,现在用java swing或者启动javaFX并等待