我正在开发一个简单的JavaFX应用程序,我无法加载其中一个资源(login.fxml),即使我可以加载另一个位于同一文件夹(main.fxml)中。
我的文件夹组织位于下面的屏幕截图中。错误位于第50行(突出显示)
loadVista方法源代码:
public static void loadVista(String fxml) { try { mainController.setVista( FXMLLoader.load( Navigator.class.getResource( fxml ) ) ); } catch (IOException e) { e.printStackTrace(); } }
有人能帮助我吗?
提前致谢, 加布里埃尔
编辑:stacktrace的一部分:
Caused by: java.lang.NullPointerException
at sisgem.view.Navigator.loadVista(Navigator.java:45)
at sisgem.SisGEMApplication.loadMainPane(SisGEMApplication.java:50)
at sisgem.SisGEMApplication.start(SisGEMApplication.java:25)
答案 0 :(得分:2)
mainController
为空,因此当您致电NullPointerException
时,您会收到mainController.setVista(...)
。这是因为您使用static
方法FXMLLoader.load(URL)
加载FXML,并且永远不会在load
实例FXMLLoader
上调用loader
。由于该实例从不执行其load()
方法,因此其控制器永远不会被初始化,loader.getController()
将返回null
。
因此,您的loadMainPane()
方法应该是
private Pane loadMainPane() throws IOException {
FXMLLoader loader = new FXMLLoader(Navigator.class.getResource(Navigator.PANE));
Pane mainPane = loader.load();
MainController mainController = loader.getController();
Navigator.setMainController(mainController);
Navigator.loadVista("login.fxml");
return mainPane ;
}