Почему мой взгляд больше не связывается с его контроллером, так как контроллер был установлен вручную? - PullRequest
0 голосов
/ 06 января 2019

С тех пор, как я вручную установил свои контроллеры, соответствующие представления, кажется, не распознают мои контроллеры. Ни один из элементов представления не распознается моими контроллерами, и ни один из моих методов контроллера не распознается их представлениями. Когда я нахожу курсор мыши над onaction='#...eventHandler' в моих представлениях, он говорит, что для элемента верхнего уровня не указан контроллер.

Однако я установил свои контроллеры (это основной контроллер, а затем есть еще один контроллер, установленный где-то еще для всплывающего окна):

FXMLLoader loader = new FXMLLoader(getClass().getResource("foodDiaryView.fxml"));
        FoodDiary foodDiary = new FoodDiary();
        FoodDiaryController controller = new FoodDiaryController(foodDiary);
        loader.setController(controller);
        Parent root = loader.load();
        primaryStage.setTitle("Food Diary");
        primaryStage.setScene(new Scene(root, 720, 480));
        primaryStage.show();

Когда я запускаю программу, я получаю эту ошибку:

Exception in Application start method
java.lang.reflect.InvocationTargetException
...
Caused by: java.lang.NullPointerException at sample.FoodDiaryController.initialize(FoodDiaryController.java:72)

По совпадению первая строка кода, которая ссылается на элемент в представлении:

@FXML private TableView<Food> breakfastTable;

И затем в инициализации (line 72), которая вызвала NullPointerException:

breakfastTable.setItems(foodDiary.getBreakfastFoods());

Кто-нибудь, кто мог бы сослаться на то, почему это происходит?

Требования:

  • Я должен установить свои контроллеры вручную, так как я не использую конструктор без аргументов с моими контроллерами.
  • Я использую IntelliJ

1 Ответ

0 голосов
/ 06 января 2019

Я могу ошибаться и не могу проверить прямо сейчас, но я помню некоторые проблемы при использовании setController и setControllerFactory. Я думаю, что когда вы указали в FXML контроллер fx: тогда вы не можете использовать setController, но должны использовать setControllerFactory или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...