Исключение Nullpointer, использующее ArrayList с ResultSet - PullRequest
1 голос
/ 30 июля 2011

У меня есть функция "getStudent ()", которая возвращает ArrayList строк, и когда я вызываю эту функцию в другом классе, я получаю исключение NullPointerException, я думал, что правильно инициализировал свой список.

Вотдве функции и строка, которую я получаю, NullPointerException выделены жирным шрифтом.

 public ArrayList<String> getStudents(){

try
{
    System.out.println("gets here ");

    Statement newStat = this.conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    ResultSet res = newStat.executeQuery("SELECT FirstName FROM Students");

            String data = "";
    while (res.next()){

    studentList.add(res.getString("FirstName"));
    }

}
catch(SQLException e){
    System.err.println("SQLException: " + e.getMessage());
}
 return studentList;
}

Функция, которая вызывает getStudents () '

  public class CancelListener implements ActionListener{
    private  Main_Menu menu;
    private ArrayList<String> arrayList = new ArrayList<String>();;
    Iterator iterator = arrayList.iterator();


      public CancelListener(Main_Menu menu) {
      this.menu = menu;
    }

  @Override
    public void actionPerformed(ActionEvent ae) {
    if(ae.getActionCommand().equalsIgnoreCase("Cancel")){

    **arrayList = StudentModel.getStudents();**// NULLPOINTER EXCEPTION

    while(iterator.hasNext()){

       System.out.println(iterator.next().toString());
    }
    this.menu.resetStudent();
    }

    }
 }

Ответы [ 4 ]

2 голосов
/ 30 июля 2011

Ваша переменная StudentModel, вероятно, равна нулю.Код, который вы опубликовали, не показывает, как инициализируется эта переменная, поэтому я не могу точно сказать вам, что вы делаете неправильно, но когда вы достигаете отмеченной строки, она должна быть нулевой.

Вы должны проверить этовы правильно инициализируете эту переменную, прежде чем пытаться ее использовать.

1 голос
/ 30 июля 2011

Вы, вероятно, не инициализировали StudentModel. Но я не могу сказать наверняка, так как эта часть кода здесь не появляется.

0 голосов
/ 30 июля 2011

Вы упомянули, что думаете, что правильно инициализировали список, но это не то, на что вы получаете исключение.Также у вас может быть другая проблема.
Вы получаете итератор для своего списка: Iterator iterator = arrayList.iterator ();Затем вы назначаете другой объект для этой ссылки: arrayList = StudentModel.getStudents (); // NULLPOINTER EXCEPTION Затем вы пытаетесь использовать итератор: while (iterator.hasNext ()) {

Насколько я понимаю, это не должно вызывать исключение, поскольку вы не вносите изменения в список, на который ссылается итератор.Но вы почти наверняка перебираете другой список, которым вы себя считаете.Возможно ли, что вы неправильно интерпретируете исключение, которое здесь каким-то образом вызвано?

0 голосов
/ 30 июля 2011

getStudents () не является статичным, и похоже, что вы вызываете его как статический метод (судя по тому, как вы использовали заглавную букву StudentModel.) Итак, как уже говорили другие, вам, вероятно, нужно создать экземплярОбъект StudentModel, затем вызовите instance.getStudents ().

Кроме того, я не вижу, где вы создаете экземпляр массива.getStudents () добавляет элементы в studentList, но мы не видим, как инициализируется studentList.Это также может быть проблемой.Честно говоря, учитывая то, что вы делаете, вероятно, нет причин делать studentList переменной экземпляра.Поэтому просто объявите переменную локально и выделите массив в методе getStudents ().

...