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

简单Java 11 JavaFXprogram,从JAR文件(Windows)运行时出错,java,javafx,java-11,openjfx,Java,Javafx,Java 11,Openjfx,我有一个在Eclipse中运行良好的测试JavaFX程序我必须添加一个模块信息文件(module info.java),其中包含以下内容: module moduletest { requires javafx.controls; exports com.javafx.test.MenuTest; } Java类: import javafx.application.Application; import javafx.scene.Scene; import javafx.sc

我有一个在Eclipse中运行良好的测试JavaFX程序我必须添加一个模块信息文件(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


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

您需要确保模块
javax.controls
JavaFX graphics.jar
出现在您的模块路径上,而不是类路径上

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


重要:理想情况下,您应该将完整的lib文件夹添加到modulepath。更多信息-

我在添加graphics.jar时仍然会遇到同样的错误。这只是一个测试程序,但我同意我会在“现实生活”中使用模块路径——只是尝试让某些东西工作。@NottmTony您是如何创建要执行的.jar的?您可以按照文档链接进行操作,然后按照Runtime images=>Modular中的说明进行操作CLI@NottmTony理想情况下,必须将其添加到modulepath。原因-否则它将导致一个普通的未命名模块,可能无法从中得到解决。感谢这对我起作用:javac--模块路径“C:\Program Files\Java\javafx-sdk-11.0.1\lib”--add modules=javafx.controls MenuTest.javaI决定在命令行上构建和运行,这起作用了--感谢build javac--模块路径“C:\Program Files\Java\javafx-sdk-11.0.1\lib”--添加模块=javafx.controls MenuTest运行Java--模块路径“C:\Program Files\Java\javafx-sdk-11.0.1\lib”--添加模块=javafx.controls MenuTest通过空指针添加到答案中,您应该作为模块启动代码;使用
--模块
(或简写版,
-m
)而不是
-jar
。据我所知,在使用
-jar
时,它不会将jar文件视为一个模块。这意味着
模块信息
文件被忽略,系统不知道如何解析
javafx.controls
javafx.graphics
模块。
--module-path ./lib/javafx.controls.jar:./lib/javafx.graphics.jar