使用带有ResultSet的ArrayList的Nullpointer异常

时间:2011-07-30 01:03:07

标签: java iterator arraylist nullpointerexception resultset

我有一个函数“getStudent()”返回一个字符串的ArrayList,当我在另一个类中调用这个函数时,我得到一个NullPointerException,我以为我已经正确初始化了我的List。

以下是两个函数,我得到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 个答案:

答案 0 :(得分:2)

您的StudentModel变量可能为空。你发布的代码没有显示该变量是如何初始化的,所以我无法确切地告诉你你做错了什么,但当你到达标记的那一行时它必须为空。

在尝试使用该变量之前,应检查是否正确初始化该变量。

答案 1 :(得分:1)

您可能没有初始化StudentModel。但我无法确定,因为这部分代码没有出现在这里。

答案 2 :(得分:0)

getStudents()不是静态的,看起来你把它称为静态方法(根据你将StudentModel大写的方式来判断。)所以,正如其他人已经说过的那样,你可能需要实例化一个StudentModel对象,然后调用instance.getStudents()。

此外,我没有看到你在哪里创建一个数组实例。 getStudents()将项添加到studentList,但我们没有看到studentList是如何初始化的。这也可能是问题所在。坦率地说,鉴于你正在做的事情,可能没有理由让studentList成为一个实例变量。所以只需在本地声明变量并在getStudents()方法中分配数组。

答案 3 :(得分:0)

你提到你认为你正确地初始化了列表,但这不是你得到的例外。此外,您可能还有其他问题 你得到一个列表的迭代器: Iterator iterator = arrayList.iterator(); 然后为该引用分配一个不同的对象: arrayList = StudentModel.getStudents(); // NULLPOINTER EXCEPTION 然后你尝试使用迭代器: 而(iterator.hasNext()){

我的理解是,这不应该导致异常,因为您没有对迭代器引用的列表进行更改。但是,您几乎肯定会在您认为自己的不同列表中进行迭代。您是否有可能错误地解释在某种程度上导致的异常?