【问题标题】:why these two codes give different outputs为什么这两个代码给出不同的输出
【发布时间】:2015-06-27 05:44:11
【问题描述】:

给定以下代码:

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");

输出:
控制器为空

代码2:

        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");

输出:
控制器不为空

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

【问题讨论】:

    标签: javafx-8 fxml fxmlloader


    【解决方案1】:

    排队

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

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

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

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

    【讨论】: