当前位置: 首页 > 知识库问答 >
问题:

oracle JDK 8中的JavaFx是否与openjfx 8版本相同?oracle jdk 8中的javafx与openjfx8之间的关系是什么?

彭博厚
2023-03-14

我们正在从Oracle jdk8迁移到OpenJDK 8。但是我们的系统有JavaFX代码,需要从JavaFX迁移到OpenJFX。

我想知道OracleJDK8中的JavaFX和openjfx8之间的关系是什么。谁能给我解释一下吗?

共有2个答案

惠野
2023-03-14

背景资料

这些信息是对巴兹尔优秀答案的补充,该答案已经全面涵盖了该主题的大部分相关信息。

这个问题是关于JavaFX8的,它现在已经过时了。此处提供的特征差异信息用于历史目的。

强烈建议所有现有项目从JavaFX8迁移到最新的JavaFX版本,所有新项目使用最新的JavaFX版本(例如JavaFX17),该版本基于openjfx源代码。

什么是Oracle JDK 8,什么是OpenJDK中的JavaFX8?

OracleJDK8是JDK和JRE的发行版,其中包括JavaFX8的实现。

JavaFX8作为OpenJDK项目的一部分是开源的。您可以在OpenJDKGithub站点上找到OpenJDK项目的JavaFX8源代码链接(外部链接可能在将来某一天消失或消亡)。

Oracle JDK 8很大程度上是由这些开源组件以及下面概述的几个闭源组件构建的。

仅使用开源代码(减去下面概述的闭源功能)就可以构建包含JavaFX 8的OpenJDK 8的完整版本。

但是,许多基于OpenJDK 8的发行版(例如,那些作为JDK和JRE实现提供给普通Linux发行版的发行版)不包括OpenJDK项目的JavaFX实现部分。

此外,来自IBM等供应商的第三方JDK发行版也没有包含JavaFX实现。

因此,对于JavaFX 8开发,使用的主要发行版是Oracle JDK/JRE 8,而不是只包含JavaFX 8的OpenJDK实现的发行版。

Oracle JDK 8和OpenJDK 8源代码实现/功能差异

此信息基于以下信息:

  • JavaFX和OpenJDK

我再也找不到网上描述这些差异的官方来源的链接。

Oracle JDK 8实现了一些在OpenJDK 8开源实现中不可用的功能。与JavaFX相关的组件:

  1. ON2 VP6视频编解码器,它是谷歌所有的,谷歌没有开源(当我最后一次检查时)。
  • 这意味着开放版本的JavaFX不能播放VP6 FLV文件。这不是一个很大的损失,因为很难找到VP6编码器或VP6编码的媒体。
  • 其他更常见的视频格式,如H.264,可以用开放版本的JavaFX播放(只要你在目标机器上预先安装了适当的编解码器)。
  • 缺乏WebStart/Browser嵌入式部署技术实际上与OpenJDK本身有关,而不是与JavaFX有关。此技术可用于部署非JavaFX应用程序。
  • Oracle JDK附带闭源渲染器实现,OpenJDK附带不同的开源渲染器。
  • 这是一个内部实现细节,我不认为实现之间有任何功能特征差异。

对于大多数用户来说,除了缺乏WebStart/Applet支持之外,两个版本之间的功能/特性差异并不重要。

Oracle JDK实现的许可模型存在差异,包括纯从OpenJDK中的OpenJFX项目源构建的JavaFX和JavaFX版本。如果这些许可差异细节对您很重要,我鼓励您对这个主题进行自己的研究。

JavaFX9

截至Java9,JavaFX不建议使用VP6编码,Oracle WebStart/Browser嵌入式应用程序部署技术也不建议使用。

因此,尽管该功能包含在Oracle SDK的这些版本中,而不是OpenJFX源代码中,但该技术已被标记为将来删除(这是由JDK/JRE/JavaFX 11版本实现的,如果不是更早的话)。

JavaFX11

对于JavaFX 11,上面关于功能差异的信息完全无关紧要,因为JavaFX 11的下载页面指出:

从JDK 11开始,javafx.*模块不再作为JDK的一部分包含。它们现在作为独立的、未捆绑的OpenJFX版本单独发布。它们可以作为maven构件与Maven/Gradle一起使用,也可以作为独立的SDK,其中包含用于jlinkjmod文件。

所以,Java11没有特定于Oracle的JavaFX版本(据我所知),对于这些版本,只有开源openjfx项目(或其他创建其打包的发行版)中的模块可用基于单一openjfx源)。

有关JavaFX11的更多信息,请参阅openjfx。io框架用户站点或内部openjfx开发人员站点。

竺承望
2023-03-14

Oracle将自己的JavaFX实现与其Oracle JDK产品的Java8版本捆绑在一起。

后来,甲骨文停止了这个捆绑包。

大约在同一时间,Oracle将其JavaFX实现开源,使该源代码成为OpenJDK项目的一个子项目。该子项目称为OpenJFX(因为Oracle保留其“Java”品牌的商业权利)。查看其GitHub页面和OpenJDK wiki页面。

Oracle现在与Glion公司分享OpenJFX开发的领导权。Gluon销售支持、附加库的许可证和服务。甲骨文也可能出售支持。

OpenJFX正在积极开发中。主要版本的发布时间与Java的每个主要版本大致相同。Java17将于本月(2021-09)发布,OpenJFX17版本已经发布。JavaFX17需要JDK11或更高版本。请参阅JavaFX17的发行说明。

有关更多信息和开发人员文档,请参阅OpenJFX网站:https://openjfx.io/

你说:

我们正在从OracleJDK8迁移到OpenJDK8

Oracle JDK产品基于OpenJDK。Oracle已promise实现它们之间的功能对等。唯一的区别在于:(a)Oracle销售对Oracle JDK的支持,在生产中使用时需要付费(但不用于开发和测试),以及(b)Oracle保留立即将任何必要的修复程序直接发送给付费客户的权利,而无需等待修复程序通过OpenJDK流程

Oracle JDK的当前版本不再捆绑JavaFX库。因此,无论您选择哪种Java发行版(Pivotal、Azul Systems、Microsoft、SAP、Amazon、BellSoft、Oracle、Red Hat/IBM、Adoptia/AdoptOpenJDK等),您都需要解决提供必要的OpenJFX库的问题...

一个选项是将库与应用捆绑在一起。新的jlink和jpack工具可能会有所帮助。

  • JEP 282: jlink:Java链接器
  • JEP 392:包装工具

另一个选项是将OpenJFX库的副本放在用户机器的类路径上。

第三种选择是使用包含OpenJFX库的JDK发行版。至少有两家公司提供了JDK发行版的变体,包括OpenJFX:Azul Systems和BellSoft。

你说:

但是我们的系统有javafx代码,需要从javafx迁移到openjfx吗?

我只看到编号为11到18的OpenJFX版本。只有OpenJFX 11和17具有长期支持。

他们建议OpenJFXJava16,最低要求Java11。因此,您可能无法将基于Java8的项目迁移到OpenJFX。

Java17将于本月发布,预计将被指定为长期支持(LTS)版本。我建议您考虑将java 8应用程序更新为java 17和OpenJFX 17。自版本8以来,Java和JavaFX都有了长足的发展。

首先,学习jeWelSea的答案,讨论通过各种版本的JavaFX的技术变化

您可能需要阅读以下白皮书:

  • OracleJava客户端路线图更新(2020-05)
  • Java仍然免费Java冠军(2019-03)
  • OracleJavaSE支持路线图by Oracle(2021-04)
 类似资料:
  • 在OSGi bundles中,用一个版本号导出和导入包。包仍然定义了一个版本。这在我看来是多余的。

  • 我试图找到解释这种差异的视频或文本,但没有找到任何能说服我的东西。我才刚刚开始,如果可能的话,我只想专注于IDE。我正在研究JScript(vue)框架,我已经在使用VSCode来实现这一点。 附言:原谅我的英语。我知道这很可怕 坦克

  • 我刚刚开始使用JavaFx(带有FXML),我想知道是否有一种方法可以个性化列表视图项在JavaFx ListView中的显示方式。我想知道是否有类似于WPF ListView的方法。JavaFx ListView的项目模板。 在WPF中,我们可以定义项目在ListView中的显示方式(带有组合控件以获取项目视图的选项) 示例: lvDataBding ListView的项在视图代码后面的代码中指

  • 数据类MyObj(Field1:String、Field2:Int、Field3:Int、Field4:String......Field10:Int) 我有一个 如果我这样做: 1)flatMap在那里是并行执行还是顺序执行?2)如果嵌套的flatMap是顺序的,有没有办法让它们像zip一样并行?

  • 问题内容: 与MYSQL sha1相关的“盐”是什么?我不知道与sha1密码加密相关的盐是什么?有人可以解释一下吗? 问题答案: 盐是添加到您想要以一种哈希方式加密的密码(或其他机密)中的值。这意味着它可以在密码之前,之后或内部,只要它的位置和值与给定提供的密码一致。 它的作用是减轻字典攻击(基本上是不加盐就预先加密的常见密码的字典)从被用来“猜测”一种单向密码,只要攻击者不知道哈希。如果每个密码

  • 目前,我的POC不使用,而是使用和。看起来就足够了。现在,我不知道应该如何处理我现有的,它在我的Spring MVC REST应用程序中工作得很好。