自从我手动设置控制器以来,相应的视图似乎无法识别我的控制器。我的控制器无法识别任何view元素,并且它们的视图也无法识别任何Controller方法。当我将鼠标悬停在视图中的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());
有人可能暗示为什么会这样吗?
先决条件:
答案 0 :(得分:1)
我可能是错的,现在无法检查,但是我记得使用setController和setControllerFactory时的一些问题。我想当您在FXML中指定fx:controller时,就不能使用setController,而必须使用setControllerFactory或类似的东西。