我正在尝试使用Eclipse Kepler运行一些JavaFX代码,并在Linux机器上安装e(fx)clipse插件,使用:
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)
我的理解是,尽管自JDK 7u6版本以来JavaFX已包含在标准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
我应该在哪里寻找它?
Oracle Java 7中jfxrt.jar的位置是:
<JRE_HOME>/lib/jfxrt.jar
Oracle Java 8中jfxrt.jar的位置是:
<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,JavaFX都包含在JDK中,并且位于默认的类路径中。这意味着编译期间编译器将自动找到JavaFX类,并在用户使用应用程序时由运行时自动找到JavaFX类。因此,使用Oracle Java 8是目前解决您问题的最佳方案。
OpenJDK for Java 8可能包括JavaFX(因为JavaFX for Java 8现在是开源的),但是它将依赖于OpenJDK包汇编程序,因为它们是否选择将JavaFX 8与其分发包括在一起。我希望他们这样做,因为它应该有助于消除您在问题中遇到的困惑,并且它还在OpenJDK中提供了更多功能。
我的理解是,虽然自JDK 7u6版本以来JavaFX已包含在标准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项目类型)将为您处理类路径问题和打包任务。
当我使用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 Files\Java\jdk1.8.0_05\jre\lib\ext\jfxrt.jar