Исключение Null Point при загрузке файла fxml из контроллера другого файла fxml

Я сталкиваюсь с той же проблемой!

Я добавлял ImageView к кнопке и добавлял путь изображения к этому ImageView в файле FXML с помощью SceneBuilder. Это работало нормально, когда я запускал его через Eclipse IDE, но не при запуске в виде файла jar.

После удаления ImageView из кнопки он начал нормально работать даже при запуске как jar.

Но теперь я застрял с той же проблемой в другом сценарии!

Я использую 3 файла FXML для создания всего окна.

  1. MainWindow (Панель границ) — содержит строку меню и панель инструментов, добавленную в верхнюю позицию области границы.
  2. CenterWindow (панель привязки)
  3. ButtomWindow (панель привязки)

В контроллере MainWindow я пытаюсь добавить CenterWindow и ButtomWindow, которые находятся в разных файлах fxml.

Но NullPointerException возникает в контроллере MainWindow в строке, где я пытаюсь загрузить файл fxml. Он говорит, что местоположение требуется в исключении. Я извлек файл 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

person Nandeesh    schedule 07.05.2015    source источник
comment
getClass().getResource(../view/Output.fxml) внутри MainWindowController.java дает значение null при запуске из файла JAR.   -  person Nandeesh    schedule 07.05.2015
comment
Попробуйте getClass().getResource("/com/example/app/view/Output.fxml")   -  person ItachiUchiha    schedule 07.05.2015
comment
@ ItachiUchiha, ваше предложение работает .. :) Большое спасибо!   -  person Nandeesh    schedule 07.05.2015


Ответы (1)


Я пытался загрузить файлы fxml, используя getClass().getResource(../view/Output.fxml"), который выдавал исключение при запуске из jar. Вместо этого использование ClassLoader.getSystemResource("com/example/app/view/Output.fxml") или getClass().getResource("/com/example/app/view/Output.fxml") решит проблему.

person Nandeesh    schedule 07.05.2015