为什么这两个代码给出不同的输出

why these two codes give different outputs

给定以下代码:

code1:

        FXMLLoader loader = new FXMLLoader();
        Parent root = (Parent) loader.load(getClass().getResource("Screen1.fxml"));
        Screen1Controller controller = loader.getController();
        if(controller == null)
            System.out.println(" controller is null");
            else System.out.println("controller is not null");

输出:
控制器为空

code2:

        FXMLLoader loader =  new FXMLLoader(getClass().getResource("Screen1.fxml"));
        Parent root = (Parent)loader.load();
//        FXMLLoader loader = new FXMLLoader();
//        Parent root = (Parent) loader.load(getClass().getResource("Screen1.fxml"));
        Screen1Controller controller = loader.getController();
        if(controller == null)
            System.out.println(" controller is null");
            else System.out.println("controller is not null");

输出:
控制器不为空

我以为他们会给出相同的结果?不是吗?

排队

Parent root = (Parent) loader.load(getClass().getResource("Screen1.fxml"));

你打电话给getResource(URL)。该方法是静态的,因此它不会更改 FXMLLoader 的任何实例(特别是不会在您的 loader 中创建控制器)。

也许您想调用 getResource(InputStream),它不是静态的。如果是这样,您应该将代码更改为:

Parent root = (Parent) loader.load(getClass().getResourceAsStream("Screen1.fxml"));