从另一个 fxml 文件的控制器加载 fxml 文件时出现空点异常



我遇到了同样的问题!

我正在将ImageView添加到按钮,并使用SceneBuilder在FXML文件中将图像路径添加到该ImageView。当我通过 Eclipse IDE 运行它时,它工作正常,但在作为 jar 文件运行时则不然。

从按钮中删除 ImageView 后,即使作为 jar 运行,它也能正常工作。

但是,现在我在不同的场景中遇到了同样的问题!

我正在使用 3 个 FXML 文件来构建整个窗口。

  1. MainWindow(边框窗格) -- 它包含添加到边框窗格顶部位置的菜单栏和工具栏。
  2. 中心窗口(锚点窗格)
  3. ButtomWindow(锚窗格)

在 MainWindow 的控制器中,我尝试添加位于不同 fxml 文件中的 CenterWindow 和 ButtomWindow。

但是,NullPointerException发生在我尝试加载 fxml 文件的行的 MainWindow 控制器中。它说异常中需要位置。 我已经在 jar 文件之外并检查了 fxml 文件在 jar 内。 有人可以帮忙吗?

包装结构:

com.example.app -- contains Main.java which has main() method
com.example.app.controller -- MainWindowController.java, CenterWindowController.java, ButtomWindowController.java
com.example.app.view -- MainWindow.fxml, CenterWindow.fxml, ButtomWindow

在Main中.java我正在加载MainWindow.fxml,加载正常。然后在 MainWindowController 中.java我尝试加载 CenterWindow.fxml 和 ButtomWindow,这给出了异常。

异常日志:

javafx.fxml.LoadException:
file:/C:/Users/a27490989/Documents/NetBeansProjects/AirbusDS/dist/AirbusDS.jar!/
ds/airbus/simulator/view/MainWindow.fxml
at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at ds.airbus.simulator.Main.start(Main.java:22)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(Unknown Source)
at com.sun.javafx.application.LauncherImpl$$Lambda$51/747183799.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda$44/584634336.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda$47/94326726.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source)
at com.sun.javafx.application.PlatformImpl$$Lambda$45/501263526.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
at com.sun.glass.ui.win.WinApplication$$Lambda$37/96639997.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Location is required.
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
at javafx.fxml.FXMLLoader.load(Unknown Source)
at ds.airbus.simulator.controller.MainWindowController.initOutputView(MainWindowController.java:214)
at ds.airbus.simulator.controller.MainWindowController.initialize(MainWindowController.java:204)
... 23 more

我试图使用getClass().getResource(../view/Output.fxml")加载fxml文件,这在从jar运行时出现异常。 而是使用ClassLoader.getSystemResource("com/example/app/view/Output.fxml")getClass().getResource("/com/example/app/view/Output.fxml")将解决问题。

最新更新