将对象添加到列表时出现异常

时间:2012-01-11 06:17:10

标签: hibernate list struts2 action

我正在尝试建立SomeClass类型的对象列表。当我尝试使用listName.add(objectOfSomeClass)向列表中添加元素时,会发生异常。当我尝试打印该异常的消息时,我得到Null。所以我无法找到问题。

我正在向你展示我的动作类中的代码。这里做的是:

我遍历员工列表,并为每个员工提取薪水记录。在循环结束时,我尝试将此薪水对象添加到相同类型的列表中。这是我得到例外的地方。我尝试过但仍然没有弄清楚问题。我想有些事我不知道而且做错了。

我正在使用hibernate连接到数据库(如果知道这里很重要的话)。

以下是动作类的代码:

private SalaryQuery salaryQuery = new SalaryQuery();
private List<SalaryPersistence> salaryDetail;
public List<SalaryPersistence> getSalaryDetail() {
    return salaryDetail;
}
public void setSalaryDetail(List<SalaryPersistence> salaryDetail) {
    this.salaryDetail = salaryDetail;
}
private List<SalaryPersistence> salDet;
public List<SalaryPersistence> getSalDet() {
    return salDet;
}
public void setSalDet(List<SalaryPersistence> salDet) {
    this.salDet = salDet;
}

SalaryPersistence sal = new SalaryPersistence();

private List<EmployeePersistence> employees;
private EmployeeQuery employeeQuery = new EmployeeQuery();

public String execute(){

    employees = employeeQuery.list(""); //gets a list of employees
    Iterator<EmployeePersistence> itr = employees.iterator();
    while(itr.hasNext()){
        EmployeePersistence empl = itr.next();
        salDet = salaryQuery.list("where Employee_Code='" + Integer.toString(empl.getEmployeeCode()) + "' and month = '" + dbMonth + "' and year = '" + dbYear + "'");

        if(salDet.isEmpty()){
            if(dbMonth==1){
                salDet = salaryQuery.list("where Employee_Code='" + Integer.toString(empl.getEmployeeCode()) + "' and month = '" + (dbMonth-1) + "' and year = '" + (dbYear-1) + "'");
            }else{
                salDet = salaryQuery.list("where Employee_Code='" + Integer.toString(empl.getEmployeeCode()) + "' and month = '" + (dbMonth-1) + "' and year = '" + dbYear + "'");
            }

            if(salDet.isEmpty()){
                SalaryPersistence salary = new SalaryPersistence();
                salary.setEmployeeCode(Integer.toString(empl.getEmployeeCode()));
                salDet.add(salary);
            }
        }
        //// salDet will have only one object corresponding to salary of an employee////
        Iterator<SalaryPersistence> sitr = salDet.iterator();
        sal = sitr.next();
        salaryDetail.add(sal);//I am trying to add the only object in salDet to salaryDetail, but am getting and exception with 'null' message//
    }
}

请帮我找到问题。

谢谢!

修改

我刚刚发现当我尝试添加时,我正在获得java.lang.NullPointerException(尝试打印堆栈跟踪)。我认为这应该会有所帮助。

2 个答案:

答案 0 :(得分:1)

你将变量salaryDetail声明为List,但是你没有创建任何内存(即实例化它)..你可以通过java.util.List(ArrayList或Vector)的任何具体实现类来完成这个..然后你永远不会得到这个例外......

当您尝试访问null的内容时,会发生NullPointerException。 如下所示,JVM可以理解salaryDetail.add(sal)。 null.add(SAL)---&GT;给出NullPointerException

答案 1 :(得分:1)

您似乎没有初始化导致NPE的列表。您需要初始化salaryDetail列表

salaryDetail=new ArrayList<SalaryPersistence>(); 

在调用列表中的任何方法之前,您只需添加此代码即可。