【问题标题】:Nullpointer Exception using ArrayList with ResultSet使用带有 ResultSet 的 ArrayList 的 Nullpointer 异常
【发布时间】:2011-10-16 08:41:59
【问题描述】:

我有一个函数“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();
    }

    }
 }

【问题讨论】:

  • 能否请您发布完整的堆栈跟踪?

标签: java iterator arraylist nullpointerexception resultset


【解决方案1】:

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

我的理解是这不应该导致异常,因为您没有对列出迭代器引用进行更改。但是,您几乎肯定会遍历您认为的不同列表。您是否可能误解了此处以某种方式引起的异常?

【讨论】:

  • 您关于将迭代器设置为 arrayList.iterator() 然后将其设置为不同列表的第一条评论不是问题。但是,这确实给我带来了另一个问题,我删除了第一个实例(解决了这个问题)。该异常是由于我没有如上所述初始化 StudentModel 对象引起的。感谢您的提示
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 谢谢。我必须初始化 StudentModel 并且它立即工作
    【解决方案4】:

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

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

    【讨论】:

    • 谢谢,这就是问题所在。
    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2011-09-11
    相关资源
    最近更新 更多