使用maven生成并执行JavaFX jar

问题描述 投票:0回答:1

我正在尝试使用以下JavaFX-Maven模板生成并执行一个简单的可运行jar(eclipse:版本:2018-09(4.9.0)Build 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:Location is required”Eror消息。

因为我只使用一个fxml文件并且它已经在resources / fxml目录中,我不知道为什么它仍然从getResource()方法得到一个空值,因此我对这个错误进行了修改并无法修复它。 。

这是项目结构和主类代码:enter image description here

问题是这行代码:

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

公共类MainApp扩展Application {

@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的更好方法?

maven javafx jar
1个回答
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。我认为开头的“/”是指项目根目录,如果没有“/”,则字符串会被添加到被调用类的文件夹位置。但我可能是错的。这很挑剔,我常常不得不求助于一些摸索来获取正确的地址字符串。

© www.soinside.com 2019 - 2024. All rights reserved.