在我的类中传递/赋值时传递NullPointerException

时间:2013-07-16 04:53:10

标签: java

每当我运行程序时,我都会收到此错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Course.enroll(Course.java:50)
at AppCoreProcessor.enroll(AppCoreProcessor.java:62)
at CourseWindow.actionPerformed(CourseWindow.java:91)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

这是生成在我的课程类中实现的异常的代码:

    public static void enroll(Student student){
        student.setStatus(true);
        enrollees.add(student);
    }

这是来自我的AppCoreProcessor类的代码,它调用方法:

    public static void enroll(int modelRow, int index) {
    oldCourse.get(modelRow).enroll(oldStudent.get(index));

    }

最后,这是从我的AppCoreProcessor类调用enroll方法的代码:

   public void actionPerformed(ActionEvent event) {

        if(event.getSource()== enrollTo){
        AppCoreProcessor.enroll(modelRow,index);
        }

我在这里尝试的是,我在我的表中获得所选索引,这与我的学生ArrayList中的索引完全相同,同样,从另一个表中获取所选索引。我现在将使用这些值从我的app处理器类调用静态方法 enroll(int,int)。我只是想弄清楚为什么我得到NullPointerException?请帮助我,我只是java的新手。

编辑*这是我对学生和课程的ArrayList的实现,

    public class AppCoreProcessor {
private static ArrayList<Student> Student = ReadAndWrite.getDefaultStudentArrays();
private static ArrayList<Course> Course = ReadAndWrite.getDefaultCourseArrays();

我正在使用这些数组作为我的JTable中的数据,在使用enroll方法之前,我创建了一个System.out.println语句来显示给定索引处的Student并且它真正显示了值,我检查了当然不是null并且学生不是null,但每当我调用我的课程类注册(学生)的方法来注册该课程的学生时,它只会抛出nullpointer异常?我不知道为什么?

2 个答案:

答案 0 :(得分:1)

studentnullenrolleesnull。确保它们都已正确初始化或进行空检查

public static void enroll(Student student){
    if(student != null && enrollees != null) {
       student.setStatus(true);
       enrollees.add(student);
    }
}

答案 1 :(得分:1)

在这种情况下我问自己的问题:

您发布的堆栈跟踪表示NPE是在第50行触发的。它是student.setStatus(true);行还是enrollees.add(student);行?

如果第50行是student.setStatus(true);行,则student参数为null。如果oldStudent.get(index)为空,则可能发生这种情况,即:列表oldStudent包含位置index null值。您将不得不转到将值推入列表的代码,并检查它是否不会推送空值。请注意,oldStudent列表本身不为空。如果是,则该行oldCourse.get(modelRow).enroll(oldStudent.get(index));抛出异常。

如果第50行是enrollees.add(student);行,那么您应该检查分配了enrollees字段的位置,并确保它没有分配null。这与第一种情况相反:它不是列表中的值,而是列表本身。