由于控制器是手动设置的,为什么视图不再与其控制器通信?

时间:2019-01-06 11:40:50

标签: javafx model-view-controller nullpointerexception javafx-8 fxml

自从我手动设置控制器以来,相应的视图似乎无法识别我的控制器。我的控制器无法识别任何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());

有人可能暗示为什么会这样吗?

先决条件:

  • 由于我没有在控制器中使用no-arg构造函数,因此我必须手动设置控制器。
  • 我正在使用IntelliJ

1 个答案:

答案 0 :(得分:1)

我可能是错的,现在无法检查,但是我记得使用setController和setControllerFactory时的一些问题。我想当您在FXML中指定fx:controller时,就不能使用setController,而必须使用setControllerFactory或类似的东西。