почему эти два кода дают разные результаты

Учитывая следующие коды:

код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");

вывод:
контроллер имеет значение 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");

вывод:
контроллер не нулевой

Я думал, что они дадут тот же результат? Это не?


person Kachna    schedule 27.06.2015    source источник


Ответы (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"));
person Krzysztof Kosmatka    schedule 27.06.2015