Исключение при добавлении объекта в список - PullRequest
0 голосов
/ 11 января 2012

Я пытаюсь составить список объектов типа 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 ]

1 голос
/ 11 января 2012

Кажется, что вы не инициализировали свой список, который вызывает NPE. Все, что вам нужно, это инициализировать ваш salaryDetail список что-то вроде

salaryDetail=new ArrayList<SalaryPersistence>(); 

Все, что вам нужно добавить этот код, прежде чем вызывать любой метод в вашем списке.

1 голос
/ 11 января 2012

вы объявили переменную salaryDetail как List, но не создали никакой памяти (т.е. создали ее экземпляр) .. вы можете сделать это с помощью любого из классов конкретной реализации java.util.List (ArrayList или Vector) .. затем Вы никогда не получите это исключение ..

NullPointerException возникает, когда вы пытаетесь получить доступ к чему-то, что является нулевым. salaryDetail.add (sal) понимается JVM как показано ниже. null.add (sal) ---> дает исключение NullPointerException

...