在文档中经常会说JavaFX运行时'是在后台做XY - 但是"运行时"? 如果我理解正确(请编辑),运行时由以下部分组成:
我的问题是:什么是 运行时?
答案 0 :(得分:3)
J Woodchucks回答了Java 7和8.这个答案只涉及Java 9 +。
对于JRE 9+,jfxrt.jar
不存在,并被.jmods
目录中的<JRE_HOME>/jmods
替换。这是JDK modularization的一部分。 JavaFX的其他必需本机库包含在<JRE_HOME>/lib
目录中。没有所需的本机库,JavaFX将无法工作。
您可以使用Oracle等供应商提供的完整JRE运行时(可能还有第三方OpenJDK提供程序,如Ubuntu或Redhat JRE程序包)。这将包括运行JavaFX所需的所有模块和库,以及构成JRE一部分但不一定需要运行JavaFX应用程序的一些模块和库。
注意,对于Java 8,一些OpenJDK供应商选择不将JavaFX运行时作为其Java发行版的一部分包含在内,需要install of an additional package自定义构建OpenJDK或切换到包含Java运行时的Java运行时JavaFX(例如Oracle JRE)。希望对于Java 9,所有OpenJDK供应商都将提供包含JavaFX的完整JRE运行时,但您可能需要等到OpenJDK供应商发布通常可用的Java 9运行时才能找到。
可以使用Java 9为JavaFX创建自定义模块化运行时,从而消除了应用程序可能不需要的一些JRE模块。 JavaFX的自定义模块化运行时需要您要使用的javafx.*
模块,这些模块的任何相关模块以及任何必需的本机库。您可以使用JavaFX packager将JavaFX应用程序打包为自定义运行时。 JDK 9 javafxpackager的打包技术基于Java 9模块系统;其内部实现使用java linker。
java packager可以进一步将自定义运行时打包为self-contained application安装包的一部分(如果需要)。自包含的应用程序包含Java或JavaFX应用程序以及运行应用程序所需的JRE。
一旦Java 9发布其一般可用性版本,我相信Oracle将提供一些进一步的官方文档和示例,演示如何为JavaFX应用程序创建自定义模块化运行时,并将其用作自包含应用程序的一部分。
此外,第三方供应商(如gluon)提供了在各种设备(如iPad和Android手机)上使用自定义JavaFX运行时打包应用程序的工具。
答案 1 :(得分:2)
引用的JavaFX Runtime是你提到的jfxrt.jar
jar。它包含JavaFX所需的库,包括JavaFX launcher线程(包含com.sun.javafx.application中的LauncherImpl)和Application类。 jfxrt.jar
的位置(无论您是JDK还是JRE)是:
我没有看到Oracle的javadoc中记录的LauncherImpl,因此链接到上面的OpenJDK版本。
答案 2 :(得分:0)
jewelsea对Java 9+的更新再次通过 Java 11 进行了更改。
Java 11没有与JavaFX捆绑在一起:您必须自己获取并链接它。
实际上,如果您使用Gradle,就可以在不知道所有细节的情况下执行此操作。 build.gradle文件通常包含以下行:
plugins {
...
id 'org.openjfx.javafxplugin' version '0.0.8'
}
...
javafx {
version = "13"
modules = [ 'javafx.controls', 'javafx.fxml' ... ]
}
...
可以在here中找到有关在像IntelliJ这样的IDE中配置非Gradle JavaFX项目的详细信息。您必须下载并解压缩一个(最新的)JavaFX JDK,然后将其作为一个库,然后作为一个模块。
如果您需要在CLI上运行(或仅查看正在发生的情况),请执行此类操作。假设您已将JavaFX JDK 11从here提取到一个目录(由您创建),例如〜/ .java / JavaFX。并假设您在包sample
中有一个名为Main
的类,其中该类extends
javafx.application.Application
:
java -cp .:~/.java/JavaFX/javafx-sdk-11.0.2/lib/*.jar --module-path ~/.java/JavaFX/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml sample.Main
...看起来很复杂,但实际上却很简单:您可以使用当前目录和库中的所有.jars配置类路径,但是还必须指定这是模块路径,然后说您需要哪些模块。注意Windows将需要另一个斜杠,并且类路径中的元素用“;”分隔。而不是“:”。