Simple Java 11 JavaFXprogram, Ошибка при запуске из файла JAR (Windows)

У меня есть тестовая программа JavaFX, которая отлично работает в Eclipse. - Мне пришлось добавить файл информации о модуле (module-info.java), содержащий следующее:

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

Класс Java:

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

Я получаю следующую ошибку:

Ошибка: не удалось найти или загрузить основной класс com.javafx.test.MenuTest.MenuTest Причина: java.lang.NoClassDefFoundError: javafx/application/Application

Примечание: у меня есть папка lib прямо в папке, из которой я запускаю jar, в которой содержатся все jar-файлы JavaFX.

1 ответ

Решение

Вы должны убедиться, что модули javax.controls а также javafx-graphics.jar присутствуют в вашем модуле пути вместо пути к классу.

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

Примечание: это не потребует добавления javafx.graphics модуль в объявлении вашего модуля, так как это требуется транзитивно javafx.controls модуль. Помогает только наличие модуля в модульном пути.

Важно: в идеале вы должны добавить полную папку lib в modulepath. Больше здесь - https://openjfx.io/openjfx-docs/

Другие вопросы по тегам