2021 年 3 月更新
此答案中的先前信息现在对于 Java 和 JavaFX 的更高版本(例如 Java 11+)已过时。此更新提供更新版本的信息。
JavaFX 现在可从openjfx.io 或公共 Maven 存储库以 SDK 或库集或模块集的形式获得。 JavaFX 已被划分为一组依赖项,而不是与 Java 运行时一起分发的单一的 jfxrt.jar 库(例如以前使用 Oracle Java 8 的情况)。
对于 JavaFX 11+ 版本,JavaFX jar 文件(以及伴随它们的本机库)的位置将取决于您构建项目的方式。例如:
- 如果您使用 Maven 或 Gradle 等构建工具并将 JavaFX 指定为依赖项,则 JavaFX jar 文件将下载到您的本地 Maven 或 Gradle 存储库(与其他 maven 依赖项相同)。
- 如果您从 openjfx.io (gluon) 下载 JavaFX SDK,则 JavaFX jar 文件将位于您将 SDK 解压缩到的位置。
Oracle Java 7中jfxrt.jar的位置是:
<JRE_HOME>/lib/jfxrt.jar
jfxrt.jar 在 Oracle Java 8 中的位置是:
<JRE_HOME>/lib/ext/jfxrt.jar
<JRE_HOME> 取决于您安装 Oracle Java 的位置,并且可能因 Linux 发行版和安装而异。
jfxrt.jar 不在 Linux OpenJDK 7 中(这是您正在使用的)。
提供JavaFX 8 for Debian based systems 的开源软件包,例如Ubuntu。要安装此软件包,必须同时安装 Debian OpenJDK 8 软件包和 Debian OpenJFX 软件包。我没有运行 Debian,所以我不确定 Debian OpenJFX 软件包在哪里安装 jfxrt.jar。
使用Oracle Java 8。
在 Oracle Java 8 中,JavaFX 既包含在 JDK 中,也位于默认类路径中。这意味着 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,则需要add it to your classpath and use appropriate JavaFX packaging tools 以允许您的用户运行您的应用程序。 e(fx)clipse 和 NetBeans JavaFX 项目类型等一些工具将为您处理类路径问题和打包任务。