2021 年 3 月更新
这个答案中以前的信息现在已经过时了,对于更高版本的Java和JavaFX(例如Java 11 +)。此更新提供了更多最新版本的信息。
JavaFX 现在可以从 openjfx.io 或公共 Maven 存储库中作为 SDK、库集或模块集获得。JavaFX已被划分为一组依赖项,而不是与Java运行时一起分发的单体库(例如,以前在Oracle Java 8中的情况)。jfxrt.jar
对于 JavaFX 版本 11+,JavaFX jar 文件(以及伴随它们的本机库)的位置将取决于您构建项目的方式。例如:
- 如果您使用 Maven 或 Gradle 等构建工具,并将 JavaFX 指定为依赖项,则 JavaFX jar 文件将下载到本地 Maven 或 Gradle 存储库中(与其他 maven 依赖项相同)。
- 如果您从 openjfx.io(gluon)下载JavaFX SDK,则JavaFX jar文件将位于您解压缩SDK的位置。
jfxrt.jar在Oracle Java 7中的位置是:
<JRE_HOME>/lib/jfxrt.jar
jfxrt.jar在Oracle Java 8中的位置是:
<JRE_HOME>/lib/ext/jfxrt.jar
这将取决于您安装Oracle Java的位置,并且在Linux发行版和安装之间可能会有所不同。<JRE_HOME>
jfxrt.jar不在Linux OpenJDK 7中(这是你正在使用的)。
一个开源软件包为基于Debian的系统(如Ubuntu)提供JavaFX 8。要安装这个软件包,必须同时安装 Debian OpenJDK 8 软件包和 Debian OpenJFX 软件包。我不运行 Debian,所以我不确定 Debian OpenJFX 软件包在哪里安装 jfxrt.jar。
使用 Oracle Java 8。
在 Oracle Java 8 中,JavaFX 既包含在 JDK 中,又位于默认类路径上。这意味着编译器在构建期间和运行时都会自动找到 JavaFX 类,而在用户使用您的应用程序时,JavaFX 类也会自动找到。因此,使用Oracle Java 8是目前解决您问题的最佳解决方案。
OpenJDK for Java 8可能包括JavaFX(因为JavaFX for Java 8现在是开源的),但它将取决于OpenJDK包汇编器是否选择将JavaFX 8包含在他们的发行版中。我希望他们这样做,因为它应该有助于消除您在问题中遇到的困惑,并且它还在OpenJDK中提供了更多的功能。
我的理解是,尽管JavaFX自JDK 7u6版本以来一直包含在标准JDK中。
是的,但只有Oracle JDK。
与Java 7捆绑在一起的JavaFX版本不是完全开源的,因此它不能包含在OpenJDK中(这是您正在使用的)。
如果您需要使用Java 7而不是Java 8,则可以下载Oracle JDK for Java 7并使用它。然后JavaFX将包含在Java 7中。由于Oracle配置Java 7的方式,JavaFX将不在类路径上。如果使用 Java 7,则需要将其添加到类路径中,并使用适当的 JavaFX 打包工具来允许用户运行应用程序。某些工具(如 e(fx)clipse 和 NetBeans JavaFX 项目类型)将为您处理类路径问题和打包任务。