我正在尝试使用以下JavaFX-Maven模板生成并执行一个简单的可运行jar(eclipse:版本:2018-09(4.9.0)Build id:2018)
它带有一个简单的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()方法得到一个空值,因此我对这个错误进行了修改并无法修复它。 。
问题是这行代码:
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的更好方法?
我认为你在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。我认为开头的“/”是指项目根目录,如果没有“/”,则字符串会被添加到被调用类的文件夹位置。但我可能是错的。这很挑剔,我常常不得不求助于一些摸索来获取正确的地址字符串。