如何通过cmd启动javafx程序?

fumotvh3  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(568)

我用javafx创建了一个小项目。在intellij idea中,它工作得很好。但当我建造它并试图通过

java -jar d:\program.jar

在window的命令promt中,它给了我一个错误:javafx运行时组件丢失,并且是运行这个应用程序所必需的。
我也试过了

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

但效果不太好
有什么想法吗?

whlutmcx

whlutmcx1#

自Java11以来,javafx运行时已从jdk中删除,现在它是自己的独立模块。这意味着您需要将javafx的需求打包到jar文件(fatjar)中。请注意,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}"
    ...
}

另一方面,如果您使用的是模块化项目(Java9+),则在执行应用程序时需要添加所需的模块。例如,为了运行jar文件(确保您使用的是java9+),您可以通过运行 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'ed映像,这些映像包含您的模块化项目和所有依赖项,包括为您的应用程序和javafx模块优化的jre。一般来说,这是向客户机分发Java9+应用程序的推荐方法。有问题的插件是:
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

相关问题