0

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

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 类调用注册方法的代码:

   public void actionPerformed(ActionEvent event) {

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

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

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

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

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

4

2 回答 2

1

要么studentnull要么enrolleesnull。确保它们都已正确初始化或进行空检查

public static void enroll(Student student){
    if(student != null && enrollees != null) {
       student.setStatus(true);
       enrollees.add(student);
    }
}
于 2013-07-16T04:54:26.783 回答
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。这是与第一种情况相反的情况:它不是列表中的值,而是列表本身。

于 2013-07-16T05:23:49.127 回答