0

给定以下代码:

代码1:

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

输出:
控制器不为空

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

4

1 回答 1

2

排队

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

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

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

Parent root = (Parent) loader.load(getClass().getResourceAsStream("Screen1.fxml"));
于 2015-06-27T18:21:57.957 回答