我正在考虑是否可以将Java应用程序的用户界面切换到JavaFX。我的大多数用户将使用Oracle JRE,该JRE最近集成了JavaFX。但是,有些正在使用OpenJDK(在linux上)。这个(旧的)问题表明OpenJDK与JavaFX的关系非常糟糕。根据这个问题,替代的OpenJFX只会在版本9中完全集成到OpenJDK中。所以我的问题有两个:
JavaFX是OpenJDK的一部分
JavaFX项目本身是开源的,是OpenJDK项目的一部分。
2019年12月更新
JavaFX的开源代码存储库位于https://github.com/openjdk/jfx。
在链接的源位置,您可以找到open JavaFX的许可证文件(当前该许可证与OpenJDK的许可证匹配:gpl+classpath exception)。
该项目的wiki位于:https://wiki.openjdk.java.net/display/openjfx/main
如果您想要快速开始使用open 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二进制分布:
>
https://packages.qa.debian.org/o/openjfx.html
安装途径:
sudo apt-get install openjfx
(据我所知,目前这只适用于Java8)。
Open JDK和Oracle JDK在JavaFX方面的区别
Oracle JDK包含一些无法从OpenJDK中使用的软件。与JavaFX相关的组件:
这意味着JavaFX的开放版本不能播放VP6 FLV文件。这并不是一个大的损失,因为很难找到VP6编码器或在VP6中编码的媒体。
WebStart/Browser嵌入式部署技术的缺乏实际上与OpenJDK本身有关,而不是具体的JavaFX。该技术可用于部署非JavaFX应用程序。
如果开源社区为Java(和其他软件)开发一种完全取代WebStart和浏览器嵌入式部署方法的部署技术,为应用程序分发提供良好的轻量级、低影响的用户体验,那就太好了。我相信已经有一些项目开始为这样一个目标服务,但还没有达到很高的成熟度和采用程度。
我个人觉得WebStart/Browser嵌入式部署是遗留技术,目前有更好的方法来部署许多JavaFX应用程序(比如自包含的应用程序)。
2019年12月更新:
已经开发了一个用于JDK11+的WebStart的开源版本,可在https://openwebstart.com上获得。
谁需要创建包含JavaFX的Linux OpenJDK发行版
更新,2019年12月:
既然JavaFX已经从大多数二进制JDK和JRE发行版(包括Oracle的发行版)中分离出来,取而代之的是作为独立的SDK、JMOD集或者作为中央Maven存储库中的库依赖项(如https://openjfx.io所述)提供,那么标准Linux OpenJDK发行版就不需要包含JavaFX了。
如果您想要一个包含JavaFX的预构建JDK,请考虑Liberica JDK发行版,它为各种平台提供。
关于部署大型应用程序的建议
我建议使用Java的自包含应用程序部署模式。
这种部署模式的描述如下:
您可以从Oracle JDK发行版或包含JavaFX的OpenJDK构建中构建一个自包含的应用程序。目前使用Oracle JDK更容易做到这一点。
由于Java的一个版本与您的应用程序捆绑在一起,因此您不必关心机器上可能预装了什么版本的Java、它具有什么功能以及它是否与您的程序兼容。相反,您可以根据一个确切的Java运行时版本测试您的应用程序,并将其与您的应用程序一起分发。部署应用程序的用户体验将与在他们的计算机上安装本机应用程序(例如,安装的windows.exe或.msi、OS X.dmg、linux.rpm或.deb)相同。
注意:自包含的应用程序特性仅适用于Java8和9,而不适用于Java10-13。Java14通过JEP 343:Packaging Tool计划再次从OpenJDK发行版中提供对该特性的支持。
更新,2018年4月:关于Oracle当前政策对未来发展的信息
问题内容: 我正在尝试确定是否可以为Java应用程序的用户界面切换到JavaFX。我的大多数用户将使用Oracle JRE,该产品已集成了JavaFX。但是,有些人正在使用OpenJDK(在Linux上)。这个(旧的)问题表明OpenJDK与JavaFX的处理非常差。根据这个问题,替代的OpenJFX将仅完全集成到版本9中的OpenJDK中。所以我的问题有两个: OpenJDK中的JavaFX支持
我用JavaFX编写了一个应用程序,我想打开一个端口来连接Arduino: <代码>串行端口=新串行端口(“端口”) 当我打开端口时: port.open端口 我遇到了以下问题(当我注释这行代码时,问题消失了): 它使用JavaFX17和Java17。有人能帮忙吗?
问题内容: 我需要使用javaFX2来执行以下操作: 1-)加载图像并使用imageView显示它。 [好] 2-)右键单击并选择“添加节点”选项,屏幕上将出现一个黑色圆圈,您可以将圆圈拖动到图像的任何位置。 [好] 3-)使用鼠标的滚轮来放大或缩小imageView,在图像上显示“ Zoom Sensation”。 [好] 3.1-) 但是,每次缩放图像时,我都希望圆遵循缩放比例,这意味着它们不
我是JavaFX的新手,我正在尝试将旧的Swing应用程序重构为JavaFX应用程序。 我还使用JPA(带有EclipseLink实现)来保存/检索数据。 所以我定义了一些带注释的POJO。 下面是我的注释POJO: TableViewControl有些问题: null
问题:我混淆了vbox和gridpane。。通常,当您可以使用vbox时,您也可以使用包含1列和n行的gridPane,因此我不确定何时使用每一列和它们之间的差异。 事实: > 我知道网格窗格有n行和n列。 我知道vbox只会垂直列出组件。(n行1列) 困惑:当我想垂直列出40-50个(水平框或其他组件)时,我不知道应该选择哪一个,因为有时我会看到人们将这些组件作为子组件添加到vbox中,而其他人
当我点击按钮时,它打印出我的窗格的场景,就像它应该有的那样。但后来,我意识到我的窗格现在捕捉KeyEvents。除了使用Fxml添加一个按钮外,我什么也没做,现在窗格捕捉KeyEvents?当我注释掉按钮的代码时,窗格不再捕捉KeyEvents 这是按钮的所有代码。 注意:我还尝试了和,但也不起作用。但是添加一个按钮突然就能工作了?我好困惑。 整个代码: 未注释按钮使窗格获得焦点,反之亦然。