我在JavaFX中创建了一个IntelliJ项目。我可以在IntelliJ中运行项目。我在配置中添加了以下代码):
--module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml但是项目的输出.jar文件(使用人工生成的)没有运行。我测试了这些命令,但没有得到任何机会:
java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar Timer.jar
java --module-path %PATH_TO_FX% --add-modules javafx.controls Timer.jar命令行的最后错误日志:
Error: Could not find or load main class Files\Java\javafx-sdk-11.0.1\lib
Caused by: java.lang.ClassNotFoundException: Files\Java\javafx-sdk-11.0.1\libp.s:在JDK-10上构建时,我可以运行这个项目的.jar文件。
编辑
我下载了JavaFX并将它的lib文件夹添加到系统环境中。为了将JavaFX添加到项目中,我执行了以下过程:项目结构>库>添加> Java > JavaFxPath/lib
然后我在这个过程中为输出jar文件创建了Artifect : Project >Artifect> Add > JAR > From Modules with with> main Class : main.Main。
发布于 2018-11-29 10:12:52
如果您有一个简单的(非模块化的) JavaFX 11项目(没有Maven/Gradle构建工具),并且您正在使用IntelliJ,就像来自这里的HelloFX示例一样,您可以从IntelliJ创建一个可以从控制台运行的jar。
关于如何运行该项目的完整教程可以找到这里,关于如何创建jar的说明是这里 (请参阅非模块化项目一节),但这些指南并不涉及IntelliJ中的Artifacts。
使用以下VM选项检查HelloFX项目是否从IntelliJ运行:
--module-path ${PATH_TO_FX} --add-modules javafx.controls,javafx.fxml其中PATH_TO_FX已在File -> Settings -> Appearance & Behavior -> Path Variables中设置,指向JavaFX SDK库。
半脂肪罐
我们可以创建一个Jar,它只包含来自项目的类和第三方依赖项,但不包含JavaFX依赖项。
转到File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies,添加您的主类,接受。
然后从列表中删除JavaFX jars,并接受。

构建该项目时,它将创建一个很小的jar (本例中为3KB)。
现在您应该能够像这样运行它:
java --module-path %PATH_TO_FX% --add-modules javafx.controls,javafx.fxml -jar out\artifacts\HelloFX_jar\HelloFX.jar(确保%PATH_TO_FX%指向有效文件夹,如果其中包含空格,则使用引号。
您可以分发这个jar,并在其他平台上运行它,只要这些平台也有JavaFX SDK。
脂肪罐
如果您想要一个包含JavaFX依赖项的完整胖jar,您仍然可以使用工件。
转到File -> Project Structure -> Artifacts -> Add -> JAR -> From modules with dependencies,添加您的主类,接受。
然后将JavaFX jars从列表中保留,并接受。建造这个项目。
理论上,您应该能够像这样运行它:
java -jar out\artifacts\HelloFX_jar\HelloFX.jar但这行不通。
原因1:您需要一个启动器类,正如解释的这里。
所以创建一个launcher类:
public class Launcher {
public static void main(String[] args) {
Main.main(args);
}
}原因2:如果您只将SDK添加到胖jar中,您将丢失本机库,正如这里所解释的那样。
因此,编辑工件,选择Launcher类作为主类,并添加本机库(Directory Content -> path-to/JavaFX SDK/bin on Windows):

现在构建项目(现在jar大约是33 MB,包含不必要的本机库)并运行:
java -jar out\artifacts\HelloFX_jar\HelloFX.jar您可以分发此jar,但只能分发到Windows平台。
如果下载其他平台的JavaFX SDK,您可以为其他平台创建类似的jars,如果将它们全部添加在一起,还可以构建跨平台jars,如上面的链接答案所解释的那样。
无论如何,您应该考虑使用jlink 相反,。
备注
关于这个错误:
原因: java.lang.ClassNotFoundException: Files\Java\javafx-sdk-11.0.1\lib
看起来库路径是在没有引号的情况下设置的,并且缺少路径C:\Program Files\...的第一部分。只需确保你使用引号:
set PATH_TO_FX="C:\Program Files\Java\javafx-sdk-11.0.1\lib"发布于 2019-09-30 12:54:39
我也有过类似的问题,使用JavaFX和IntelliJ非模块化的Gradle (https://openjfx.io/openjfx-docs/)导出/生成Jar。
我使用Gradle jar命令生成的jar没有运行,并抛出错误,说它找不到我的主类。当我打开我的罐子时,我找到了我的主要课程。所以我意识到这个错误与Jar打包有关。

我通过将JavaFX SDK添加到SDk中的IntelliJ中来解决这个问题,如下所示。

在此之后,我使用常规的Gradle build Jar命令来生成我的Jar文件(如下所示),它将正常运行。

发布于 2020-12-07 00:56:03
最简单的方法是使用包含OpenJDK的JavaFX构建。Bellsoft和Azul都生产这样的产品。
关于阿祖尔的祖鲁OpenJDK的构建:https://www.azul.com/downloads/zulu-community/?version=java-11-lts&package=jdk-fx
对于Bellsoft Liberica JDK:https://bell-sw.com/pages/downloads/#/java-11-lts并选择“完全JDK”
这些构建基本上是OpenJDK,添加了OpenJFX JavaFX模块。但是要小心,因为JavaFX的某些方面在LibericaFX上可能不受支持。请参阅https://bell-sw.com/pages/liberica-release-notes-11.0.9.1/
https://stackoverflow.com/questions/53533486
复制相似问题