首页 > 解决方案 > JavaFX 控制器返回 null

问题描述

我正在尝试调用 OverviewController 中的 setTodos 函数。当我以这种方式尝试时,它不起作用,因为控制器为空。任何人都知道这里的问题可能是什么?(对JavaFX不太了解......)

@Override
    public void start(Stage primaryStage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource("view/JavaTodoApp.fxml"));
        primaryStage.setTitle("JavaTodoApp");
        primaryStage.setScene(new Scene(root, 600, 500));
        primaryStage.show();
        // access to controller
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(Main.class.getResource("view/JavaTodoApp.fxml"));
        OverviewController controller = loader.getController();
        controller.setTodos(this);
    }

标签: javafxmodel-view-controller

解决方案


您需要从FXMLLoader您创建的实例加载 FXML,而不是从静态方法。

@Override
public void start(Stage primaryStage) throws Exception {

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(Main.class.getResource("view/JavaTodoApp.fxml"));
    Parent root = loader.load();
    OverviewController controller = loader.getController();
    controller.setTodos(this);

    primaryStage.setTitle("JavaTodoApp");
    primaryStage.setScene(new Scene(root, 600, 500));
    primaryStage.show();
}

推荐阅读