Внедрение @FXML NullPointer во время вызова метода на узлах

ОК, у меня есть немного странный, вероятно, легко быть справедливым, но я работаю над приложением java fx с базой данных sql, подключенной через JDBC. все работает хорошо кроме одного. Когда вы нажимаете кнопку, сцена меняется, и данные извлекаются из базы данных, все это работает отлично, отладка показывает, что правильные значения такие, какими они должны быть, но когда я вызываю такой метод, как label1.setText(someString); он бросает NPE.

Итак, я запускаю отладку, все переменные выглядят хорошо. затем я делаю простую печать на самом узле, он печатает ноль, я думал, что инъекция fxml обработала создание экземпляра. Я проверил файлы fxml, у всех есть fx-id, и каждая вещь упоминается в классе. это, вероятно, что-то действительно глупое, что я упустил из виду.

это метод, который вызывает исключение, этот класс содержит запуск, основной, дескриптор и этот метод

     public void insertData(ResultSet rsIn) {
                    try {

                        while (rsIn.next()) {
                            int housenumber = rsIn.getInt("housenumber");
                            String maintext = rsIn.getString("maintext");
                            String img1 = rsIn.getString("img1");
                            String img2 = rsIn.getString("img2");
                            String img3 = rsIn.getString("img3");
                            String img4 = rsIn.getString("img4");

 // scrollLab is of Text type
      scrollLab.setText(maintext);//here is where the NPE is thrown 

                        }

                    } catch (SQLException sql) {
                        sql.printStackTrace();

                    }
              }

другой класс содержит все методы, связанные с sql, и метод getStuff, из которого происходит rsIn результатов.

public void getstuff(String buttonid) {

        switch (buttonid) {

            case "winterfell":
                try {


                    conn = DriverManager.getConnection(DB_URL, USER, PASS);
                    Statement stark = conn.createStatement();
                    System.out.println("Fetching records");
                    String sql = "SELECT * FROM houseinfo WHERE housenumber = 1";
                    rs = stark.executeQuery(sql);
                    GOT_Map map = new GOT_Map();
                      map.insertData(rs);

                   }catch(SQLException e){}
                  break;

и, наконец, метод дескриптора запускает процесс, это внутри класса контроллера того же класса, где возникает исключение

@Override
    public void handle(ActionEvent event) {
        Sql_handler sql = new Sql_handler();
        try {

// will load the new scene for all map buttons but will pull data from the database to fill blanks
            if (event.getSource() == winterfell) {
                System.out.println("winterfell clicked");

                //getting reference to the button's stage 
                Stage stageref = (Stage) winterfell.getScene().getWindow();
                inforoot = FXMLLoader.load(getClass().getResource("infoView.fxml"));
                stageref.setScene(scene2);
                sql.getstuff("winterfell");

это, вероятно, простое исправление, которое я упускаю из виду, работая над этим без остановки последние два дня, любая помощь очень ценится


person JavaScrub    schedule 30.04.2017    source источник
comment
если вы не инициализируете свой label1, вы получите NPE   -  person YCF_L    schedule 30.04.2017
comment
@YCF_L Я думал, что инъекция fxml справляется с этим. я могу вызывать методы на узлах первых сцен без какой-либо из этих Label label1 = new Label();   -  person JavaScrub    schedule 30.04.2017
comment
@JavaScrub FXMLLoader вводит поля, аннотированные @FXML в контроллере. Вы не вызываете insertData() на контроллере: вы вызываете его на map, который является объектом, который вы создали сами. Итак, map.scrollLab равно нулю.   -  person James_D    schedule 30.04.2017
comment
@ James_D 2 о, я вижу, большое спасибо, чувак. легко исправить, как я и подозревал   -  person JavaScrub    schedule 30.04.2017
comment
Насколько легко исправить, зависит от того, насколько легко получить ссылку на фактический контроллер в вашем методе getStuff().   -  person James_D    schedule 30.04.2017