在开发了一个名为在Mac上使用IntelliJ的演示jar并希望在Linux上运行它之后,我自己也遇到了这个确切的问题。在Ubuntu 19.10上安装jdk后,正如@Itai回答的那样,我还需要安装OpenJFX,它不再与openjdk 11捆绑在一起。我使用了常规的 apt 命令:javafx1.jar
sudo apt install default-jdk
sudo apt install openjfx
关键的下一步: -->然后,正如@Lotfi建议的这个堆栈溢出所回答的那样,在运行jar时,您需要将路径传递给这些OpenJFX模块。官方文档也是这么说的。所以对于跑步,你说:javafx1.jar
java --module-path /usr/share/openjfx/lib --add-modules=javafx.controls,javafx.fxml,javafx.base,javafx.media,javafx.web,javafx.swing -jar javafx1.jar
这是一个令人讨厌的长线必须使用。您可以使用以下参数缩短它以指定该目录中的所有模块:ALL-MODULE-PATH
java --module-path /usr/share/openjfx/lib --add-modules ALL-MODULE-PATH -jar javafx1.jar
附言:您可以通过运行 找到 javafx 模块路径在系统上的位置。dpkg-query -L javafx
为什么java的错误消息是愚蠢的
在这种情况下,该消息实际上具有误导性,与无法找到自己无关。勤奋地检查罐子的内容,并检查路径是否在 ,就像你所做的那样 - 没有提供任何线索。Could not find or load main class sample.Main
sample.Main
jar -tf javafx1.jar
sample.Main
META-INF/MANIFEST.MF
因为依赖于JavaFX并且因为找不到后者,Java错误地告诉你这就是问题所在,而不是报告缺少依赖项 - Java IMO没有良好的行为。您可以使用 来隔离问题,例如: 告诉我缺少什么。sample.Main
sample.Main
jdeps
jdeps -v javafx1.jar
所以
jdeps -v javafx2.jar | grep "not found"
列出我缺少的东西,而
jdeps --module-path /usr/share/openjfx/lib --add-modules=ALL-MODULE-PATH -v javafx1.jar | grep "not found"
说没有遗漏任何东西。