如何通过 CMD 启动 JavaFX 程序?

How do I launch JavaFX program through CMD?

我使用 javafx 创建了一个小项目。在 Intellij idea 中它工作得很好。但是当我构建它并尝试 运行 by

java -jar d:\program.jar

在 window 的命令提示中它给了我 错误:JavaFX 运行时间组件丢失,运行 此应用程序需要 .

我也试过了

java -jar d:\program.jar --module-path d:\javafx\lib --add-modules javafx.controls,javafx.fxml

但是也没用

有什么想法吗?

自 Java 11 起,JavaFX 运行time 已从 JDK 中删除,现在它是自己独立的模块。这意味着您需要在 JAR 文件(fat jar)中捆绑 JavaFX 的要求。请注意 JavaFX 要求是平台相关的,这意味着您可能需要为每个目标平台创建单独的 JAR 文件。对于 Gradle,这看起来像这样:

...
def currentOS = DefaultNativePlatform.currentOperatingSystem;
def platform
if (currentOS.isWindows()) {
    platform = 'win'
} else if (currentOS.isLinux()) {
    platform = 'linux'
} else if (currentOS.isMacOsX()) {
    platform = 'mac'
}

dependencies {
    implementation "org.openjfx:javafx-base:15.0.1:${platform}"
    implementation "org.openjfx:javafx-controls:15.0.1:${platform}"
    implementation "org.openjfx:javafx-graphics:15.0.1:${platform}"
    implementation "org.openjfx:javafx-fxml:15.0.1:${platform}"
    ...
}

另一方面,如果您正在使用模块化项目 (Java 9+),则需要在执行应用程序时添加所需的模块。例如,为了 运行 JAR 文件(确保你使用的是 Java 9+,你可以通过 运行ning java --version 检查):

java --module-path ${PATH_TO_FX} --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.web -jar MyApp.jar

其中使用 --add-modules 参数添加的模块是满足您特定需求的必需模块,${PATH_TO_FX} 变量是 JavaFX 运行 所在的路径可以查到时间

请注意,此方法要求您的客户在其系统上安装 JavaFX 运行time 'installed'(和 JRE),一般来说不再是推荐的方法分发您的 Java 应用程序。

如果您使用的是 Maven 或 Gradle,可以使用优秀的插件来创建 jlink 图像,其中包含您的模块化项目和所有依赖项,包括针对您的项目优化的 JRE应用程序和 JavaFX 模块。一般来说,这是向您的客户分发 Java 9+ 应用程序的推荐方式。有问题的插件是:

https://badass-jlink-plugin.beryx.org/releases/latest/
https://maven.apache.org/plugins/maven-jlink-plugin/

这确实需要您创建一个 module-info.java 文件: https://openjdk.java.net/projects/jigsaw/quick-start