我正在尝试使用以下JavaFX-Maven模板生成并执行一个简单的可运行jar(eclipse:版本:2018-09(4.9.0)构建ID:2018)
它带有一个简单的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()中获取空值方法...
问题是这行代码:
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的更好方法?
答案 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。我认为开头的“ /”是指项目根目录,而没有“ /”的字符串将被添加到被调用类的文件夹位置。但是我可能是错的。这很挑剔,通常我不得不采取一些摸索的方式来获取正确的地址字符串。