繁体   English   中英

如何通过 CMD 启动 JavaFX 程序?

[英]How do I launch JavaFX program through CMD?

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

java -jar d:\program.jar

在窗口的命令提示符中它给了我错误:JavaFX 运行时组件丢失,并且需要运行此应用程序

我也试过

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

但它也没有用

有任何想法吗?

自 Java 11 以来,JavaFX 运行时已从 JDK 中删除,现在它是自己的独立模块。 这意味着您需要在 JAR 文件(胖 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+,您可以通过运行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 运行时(和 JRE),并且通常不再是分发 Java 应用程序的推荐方法。

如果您使用的是 Maven 或 Gradle,则可以使用出色的插件来创建包含模块化项目和所有依赖项的jlink映像,包括针对您的应用程序优化的 JRE 和 Z47A34A9D6CE8F6ECB970Z8888C 模块。 一般来说,这是向您的客户分发 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM