2012-01-11 84 views
0

我正在嘗試建立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

由於懶惰,你能表明你在哪條線上得到異常:)? – 2012-01-11 06:19:27

+0

@Umesh:最後一行,即'salaryDetail.add(sal);'。我還發現這個異常是一個'java.lang.NullPointerException'。 – kanishk 2012-01-11 06:32:44

+1

添加行'salaryDetail = new ArrayList ()'在添加方法之前,它應該可以工作或在添加任何東西之前初始化您的salaryDetail在您選擇的任何位置 – 2012-01-11 06:35:03

回答

1

看來你還沒有初始化列表,這是造成NPE.All你需要有初始化你salaryDetail列表類似

salaryDetail=new ArrayList<SalaryPersistence>(); 

在調用列表中的任何方法之前,您必須添加此代碼。

+0

我只是看着我以前的用途。我一直使用這個列表作爲'this.listName = //返回列表的函數//'。在這裏我不需要單獨的初始化。這裏有什麼區別。 – kanishk 2012-01-11 06:53:05

+0

你的函數必須返回一個有效的列表實例,你所做的只是指出,總之你正在返回完全初始化列表:) – 2012-01-11 06:54:34

+0

okz,對。實際上,hibernate自己正在進行初始化。所以我從不需要它。謝謝!! – kanishk 2012-01-11 06:55:59

1

你聲明瞭一個變量salaryDetail作爲List,但是你沒有創建任何內存(即實例化它)..你可以通過java.util.List(ArrayList或Vector)的任何具體實現類來實現。那麼你永遠不會得到這個例外..

當您訪問的東西是空的時發生NullPointerException。 salaryDetail.add(sal)被JVM理解如下。 null.add(SAL)--->給出NullPointerException異常

相關問題