[英]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.