使用Maven生成并执行JavaFX jar

时间:2019-02-19 18:11:27

标签: maven javafx jar

我正在尝试使用以下JavaFX-Maven模板生成并执行一个简单的可运行jar(eclipse:版本:2018-09(4.9.0)构建ID:2018)

enter image description here

它带有一个简单的JavaFX GUI,我在Eclipse IDE上很好地编译了程序(我使用的是JDK 10,jre 10.0.2),但是我不知道如何生成可执行的jar文件并运行它,如果我使用Eclipse export-> Runnable jar来执行此操作,则会在main.java文件的第14行上得到著名的“ java.lag.NullPointerException:需要位置”错误消息。

我为这个错误急忙解决,无法修复它,因为我只使用一个fxml文件,并且它已经在resources / fxml目录中,所以我不知道为什么它仍然从getResource()中获取空值方法...

这是项目结构和Main class代码 :enter image description here

问题是这行代码:

Parent root = FXMLLoader.load(getClass().getResource("/fxml/Scene.fxml"));

公共类MainApp扩展了应用程序{

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("/fxml/Scene.fxml"));

    Scene scene = new Scene(root);
    scene.getStylesheets().add("/styles/Styles.css");

    stage.setTitle("JavaFX and Maven");
    stage.setScene(scene);
    stage.show();
}

/**
 * The main() method is ignored in correctly deployed JavaFX application.
 * main() serves only as fallback in case the application can not be
 * launched through deployment artifacts, e.g., in IDEs with limited FX
 * support. NetBeans ignores main().
 *
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

}

是eclipse生成错误的jar的方式,还是为maven项目生成可运行的jar的更好方法?

1 个答案:

答案 0 :(得分:0)

我认为您在getResources()中的字符串参数将导致搜索以下内容:

AddressAppNew/fxml/Scene.fxml

由于该文件位于“ src / main / resources”包中,因此您必须将这些包和子包包括在地址中。

我会尝试以下操作:

getClass().getResource("/src/main/resources/fxml/Scene.fxml")

或者也许是这个

getClass().getResource("../../../../resources/fxml/Scene.fxml")

后者基于MainApp位于文件夹

AddressAppNew/src/main/java/com/corp/AdressAddNew

我找不到用于解释getResource()字符串参数的语法的API。我认为开头的“ /”是指项目根目录,而没有“ /”的字符串将被添加到被调用类的文件夹位置。但是我可能是错的。这很挑剔,通常我不得不采取一些摸索的方式来获取正确的地址字符串。