我试图运行一些JavaFX代码与Eclipse开普勒,与e(fx)clipse插件安装,在Linux机器上,使用:
java version "1.7.0_21"
OpenJDK Runtime Environment (IcedTea 2.3.9) (7u21-2.3.9-5)
OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode)
我的理解是,虽然JavaFX从JDK 7u6版本开始就包含在标准JDK中,但JavaFX运行时JAR文件jfxrt.jar故意从Java运行时路径中删除,直到JavaFX和其他Java基础设施之间的进一步测试完成。因此,当我们创建一个新的Java项目时,必须手动将它添加到项目构建路径库中。
我一直在下面两个目录中寻找那个jar,但没有成功:
/usr/lib/jvm/java-7-openjdk-common/jre/lib/
/usr/lib/jvm/java-7-openjdk-amd64/lib
我还应该去哪里找呢?
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下载JavaFX SDK。. io (gluon),那么JavaFX jar文件将位于您解压缩SDK的位置。
jfxrt.jar在Oracle Java 7中的位置为:
<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中(这是你正在使用的)。
一个为基于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,你可以下载Java 7的Oracle JDK并使用它。然后JavaFX将包含在Java 7中。由于Oracle配置Java 7的方式,JavaFX不会在类路径上。如果使用Java 7,则需要将其添加到类路径中,并使用适当的JavaFX打包工具来允许用户运行应用程序。一些工具,如e(fx)clipse和NetBeans JavaFX项目类型将为您处理类路径问题和打包任务。
当我使用apt install openjfx
安装JavaFX时,我的位于这里在Ubuntu 18.04上(如上所述@jewelsea)
/usr/share/java/openjfx/jre/lib/ext/jfxrt.jar
/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jfxrt.jar
在Ubuntu上使用OpenJDK,它安装在/usr/lib/jvm/default-java/jre/lib/ext/jfxrt.jar
(技术上它是一个符号链接到/usr/share/java/openjfx/jre/lib/ext/jfxrt.jar
,但它可能更好地使用default-java
链接)
jfxrt.jar在JDK 1.8 (Windows)中的位置为:
C:Program FilesJavajdk1.8.0_05jrelibextjfxrt.jar