每当我运行程序时,我都会收到此错误:
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异常?我不知道为什么?
答案 0 :(得分:1)
student
为null
或enrollees
为null
。确保它们都已正确初始化或进行空检查
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
。这与第一种情况相反:它不是列表中的值,而是列表本身。