JavaFX是OpenJDK的一部分
JavaFX项目本身是开源的,是OpenJDK项目的一部分。
然而,OpenJDK项目包括许多项目,包括孵化项目和其他项目,如OpenJFX,其源代码和实现不是作为某些JDK / JRE发行版的一部分发布的(例如Oracle JDK 11 +实现和许多开源JDK Linux软件包安装不包括JavaFX运行时)。
现代JavaFX发行版是模块
JavaFX不是大多数JDK 11 +下载的一部分,它通常由开发人员作为模块或单独的SDK下载。
专门针对 JavaFX 11+,详见 https://openjfx.io 站点:
JavaFX 运行时可作为特定于平台的 SDK,或作为多个 jmods,或作为 Maven Central 中的一组工件提供。
这意味着 JavaFX 可以从在受支持的平台上运行的任何现代 JDK 中使用,方法是在运行时模块路径上包含相应的 JavaFX 模块(可从 openjfx 或 Maven Central 获得)。
openjfx 提供的所有 JavaFX 模块都是不包含闭源代码的开源实现。
对于基于 JavaFX 的应用程序分发给最终用户,建议基于 JDK 和 JavaFX 模块 + 所需的依赖库代码和应用程序代码打包运行时映像分发。关于这个打包的完整讨论超出了这个答案的范围,但是如果需要,可以创建一个完全基于开源JDK + JavaFX + library+应用程序代码的发行版。有关此内容的更多(尽管不全面)信息,请参阅有关运行时映像的 openjfx.io 文档。
2021年9月更新
另请参阅相关问题:
其中涵盖了有关Java 8以及一些更高版本的信息。
2019年12月更新
有关如何使用开源 JavaFX 的最新信息,请访问 https://openjfx.io。这包括有关将 JavaFX 用作从现有 JDK 访问的模块化库(例如开放式 JDK 安装)的说明。
JavaFX的开源代码存储库处于 https://github.com/openjdk/jfx。
在链接的源位置,您可以找到开放 JavaFX 的许可证文件(目前此许可证与 OpenJDK 的许可证匹配:GPL+类路径例外)。
该项目的维基位于:https://wiki.openjdk.java.net/display/OpenJFX/Main
如果你想快速开始使用开放的JavaFX,Bellsoft的Liberica JDK发行版提供了预构建的OpenJDK二进制文件,其中包括适用于各种平台的OpenJFX。
对于作为独立应用程序分发,Java 14 计划实现 JEP 343:打包工具,该工具“支持本机打包格式,为最终用户提供自然的安装体验。这些格式包括Windows上的msi和exe,macOS上的pkg和dmg,以及Linux上的deb和rpm“,用于部署基于OpenJFX的应用程序,具有本机安装程序,并且没有额外的平台依赖项(例如预安装的JDK)。
较旧的信息可能会随着时间的推移而过时
从 OpenJDK 存储库构建 JavaFX
您可以完全从源代码构建OpenJDK(包括JavaFX)的开放版本,该版本不依赖于Oracle JDK或封闭源代码。
更新:使用从 OpenJDK 源代码预构建的 JavaFX 发行版
正如在对这个问题的评论和另一个答案中所指出的,Debian Linux发行版提供了基于OpenJDK的JavaFX二进制发行版:
-
安装方式:
sudo apt-get install openjfx
(据我所知,目前这仅适用于Java 8)。
Open JDK 和 Oracle JDK 在 JavaFX 方面的区别
为 Java 8 提供了以下信息。从Java 9开始,JavaFX的VP6编码已被弃用,Oracle WebStart/Browser嵌入式应用程序部署技术也被弃用。因此,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 应用程序。
如果开源社区为Java(和其他软件)开发一种部署技术,完全取代WebStart和浏览器嵌入式部署方法,为应用程序分发提供良好的轻量级,低影响的用户体验,那就太好了。我相信已经有一些项目开始服务于这样的目标,但它们还没有达到很高的成熟度和采用水平。
就个人而言,我觉得WebStart/Browser嵌入式部署是传统技术,目前有更好的方法来部署许多JavaFX应用程序(例如自包含应用程序)。
2019年12月更新:
WebStart for JDK 11+的开源版本已经开发出来,https://openwebstart.com。
谁需要创建包含 JavaFX 的 Linux OpenJDK 发行版
由那些为基于OpenJDK的Linux发行版创建软件包的人(例如Redhat,Ubuntu等)为JDK和JRE创建包含JavaFX的RPM。然后,这些软件分发者需要将生成的软件包放在其标准分发代码存储库中(例如 fedora/red hat network yum 存储库)。目前还没有这样做,但是如果Java 8 Linux软件包在2014年3月Java 8发布时不包括JavaFX,我会感到非常惊讶。
更新,2019年12月:
现在,JavaFX已经从大多数二进制JDK和JRE发行版(包括Oracle的发行版)中分离出来,取而代之的是,它可以作为独立的SDK,jmods集或作为从中央Maven存储库获得的库依赖项(如 https://openjfx.io 所述),那么标准Linux OpenJDK发行版就不需要包含JavaFX了。
如果你想要一个包含JavaFX的预构建的JDK,请考虑Liberica JDK发行版,它为各种平台提供。
关于部署大量应用程序的建议
我建议使用Java的独立应用程序部署模式。
此部署模式的说明如下:
应用程序安装在本地驱动器上,并使用 Java 和 JavaFX 运行时的私有副本作为独立程序运行。该应用程序的启动方式与该操作系统的其他本机应用程序相同,例如,使用桌面快捷方式或菜单项。
您可以从Oracle JDK发行版或包含JavaFX的OpenJDK构建中构建自包含的应用程序。目前,使用Oracle JDK更容易做到这一点。
由于 Java 的某个版本与您的应用程序捆绑在一起,因此您不必关心计算机上可能预安装了哪个版本的 Java、它具有哪些功能以及它是否与您的程序兼容。相反,您可以针对确切的 Java 运行时版本测试应用程序,并将其与应用程序一起分发。部署应用程序的用户体验将与在其计算机上安装本机应用程序相同(例如,安装了.exe或.msi,OS X .dmg,linux .rpm或.deb)。
注意:自包含应用程序功能仅适用于 Java 8 和 9,而不适用于 Java 10-13。Java 14,通过JEP 343:打包工具,计划再次从OpenJDK发行版中为此功能提供支持。
2018 年 4 月更新:有关 Oracle 当前未来发展政策的信息
- 《JavaFX和其他Java客户端路线图更新的未来》作者:Oracle产品管理高级总监Donald Smith。
- Java 客户端路线图更新 - 2018 年 3 月 Oracle 白皮书。
对我来说,这有效。
$ sudo apt-get install openjfx
-
更新表查看行外观编辑的信息 我有一些措施来更改某些 TableView 行的外观。该行应以笔触和红色显示文本。实际上,我可以用红色显示它,但仍然无法进行笔触。这是我用来更改行外观的 css 类: 如何更新所有列?
-
JavaFX - Observable Collections in the data model classes Here follows a simple piece of JavaFX code, to illustrate my question. If I understood correctly, after calling the method, not only will the content of the list be shown in the Gui component, but also if items are added to the instance afterwards, t
-
JavaFX FileChooser可以“记住”它打开的最后一个目录吗? 我的视图控制器有一个用于打开和保存文件的实例。 相反,每次我调用这些方法之一时,对话框都会在用户主目录中打开。 如何使对话框的“当前目录”在不同的调用中持久存在? 当前行为
-
NSEvent 中的断言失败? 感谢您抽出宝贵时间阅读本文。我对JavaFX相当陌生,在我的编译器中有一个奇怪的错误,我想对此有所了解。 这是错误: 除了教会之外,这不会去任何地方,除了自动化一些繁琐的任务之外
-
JavaFX:无法在 Linux 上查找或加载主类 我已经使用Intellij Idea在Windows中使用Java(FX)开发了一个程序,并且运行良好,然后我导出了工件(jar),并且在Windows上运行它没有问题(无论是使用控制台还是双击它)。 然后我把它复制到