- JavaFX框架的所有类等,位于javafx包中,存储在jxfrt.jar文件中 - “JavaFX-Launcher”线程 - “JavaFX应用程序线程”:运行您的JavaFX应用程序的所有对象和线程。当调用Application.launch()方法时,它们由JavaFX-Launcher线程创建。
我的问题是:什么是运行时?
J Woodchucks的答案涉及Java 7和8。这个答案只涉及Java 9+。
对于JRE 9+,jfxrt.jar
不存在,被<JRE_HOME>/jmods
目录中的.jmods
替换。这是JDK模块化的一部分。JavaFX所需的其他本地库包含在<JRE_HOME>/lib
目录中。没有这些必需的本地库,JavaFX将无法工作。
您可以使用供应商提供的完整JRE运行时,例如Oracle(以及可能是Ubuntu或Redhat JRE软件包等第三方OpenJDK提供者)。这将包括运行JavaFX所需的所有模块和库以及一些构成JRE的但不一定需要运行JavaFX应用程序的部分。
请注意,对于Java 8,一些OpenJDK供应商选择不将JavaFX运行时作为其Java发行版的一部分包含在内,需要安装额外软件包、定制构建OpenJDK或切换到包括JavaFX的java运行时(例如Oracle JRE)。希望对于Java 9,所有OpenJDK供应商都将提供包含JavaFX的完整JRE运行时,但您可能需要等待OpenJDK供应商发布普遍可用的Java 9运行时才能找到。javafx.*
模块、这些模块的任何依赖模块以及任何必要的本地库。您可以使用JavaFX打包工具将您的JavaFX应用程序与自定义运行时打包在一起。JDK 9 javafxpackager的打包技术基于Java 9模块系统;其内部实现使用java链接器。.dll
,在Linux上是.so
等),用于与系统操作系统和图形系统进行接口。 - jewelseajewelsea针对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' ... ]
}
...
在像IntelliJ这样的IDE中配置非Gradle JavaFX项目的详细信息可以在这里找到。您需要下载并提取(最新的)JavaFX JDK,然后将其作为库包含,再作为模块。
如果您需要在CLI上运行(或只是查看发生了什么),请执行此类操作。假设您已经从这里提取了JavaFX JDK 11到一个目录(由您创建)中,例如~/.java/JavaFX。并且假设您有一个名为Main
的包中类sample
,它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将需要另一个斜杠,并且类路径中的元素用";"而不是":"分隔。