我正在尝试建立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
(尝试打印堆栈跟踪)。我认为这应该会有所帮助。
答案 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>();
在调用列表中的任何方法之前,您只需添加此代码即可。