简单 Java 11 JavaFXprogram,从 JAR 文件 (Windows) 运行 时出错

Simple Java 11 JavaFXprogram, Error when run from JAR file (Windows)

我有一个测试 JavaFX 程序,在 Eclipse 中 运行 没问题。 - 我必须添加一个包含以下内容的模块信息文件(模块-info.java):

module moduletest {
    requires javafx.controls;
    exports com.javafx.test.MenuTest;
}

Java class:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class MenuTest extends Application {

@Override
public void start(Stage primaryStage) {

    Scene scene = new Scene(new VBox(), 300, 250);

    Circle circle1 = new Circle(-20,0,200);        
    circle1.setFill(Color.CADETBLUE);
    ((VBox) scene.getRoot()).getChildren().addAll(circle1);

    primaryStage.setScene(scene);
    primaryStage.show();        
}

public static void main(String[] args) {
        launch(args);
    }
}

当我 运行 使用以下命令将其作为导出的 JAR 文件时

java -jar TonyJavaFX.jar -classpath .;./lib/javafx.controls.jar

,我收到以下错误:

错误:无法找到或加载主程序 class com.javafx.test.MenuTest.MenuTest 原因:java.lang.NoClassDefFoundError:javafx/application/Application

注意:我在 运行 从中下载 jar 的文件夹下有一个 lib 文件夹,其中包含所有 JavaFX jar 文件。

您需要确保模块 javax.controlsjavafx-graphics.jar 存在于您的 模块路径而不是类路径

--module-path ./lib/javafx.controls.jar:./lib/javafx.graphics.jar

注意:这不需要在模块声明中添加 javafx.graphics 模块,因为 javafx.controls 模块需要它。只要模块在模块路径中存在就可以帮助它。

重要提示:理想情况下,您应该将完整的 lib 文件夹添加到模块路径。更多信息 - https://openjfx.io/openjfx-docs/#install-javafx