我尝试将某些项目添加到JComboBox,但收到NullPointerException错误。
这是我的代码的示例:

public adminPanel() {
        fillComboTeacher();
        initComponents();
    }
    public void fillComboTeacher(){
        HashSet<Person> set = cont1.returnTeachers();
        Iterator it = set.iterator();
        try {
            while (it.hasNext()) {
                Person p = (Person) it.next();
                String name = p.getName();
                comboTeacher.addItem(name);
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }


人员类别-名称,州(带有getter和setter)

returnTeachers()-返回一个包含状态为“ Teacher”的人员的HashSet

我不明白为什么会收到此错误,为什么我不能填写ComboBox,所以我逐步按照教程进行操作,但仍然感觉不太好。
谢谢!

最佳答案

您在呼叫fillComboTeacher之前先呼叫initComponents

查看方法的名称,我假设您在后者中初始化了comboTeacher

因此,在那一点(comboTeacher.addItem(name);)上,comboTeacher尚未初始化,因此NullPointerException也没有初始化。

要解决此问题,只需在构造函数中交换两个方法调用以初始化组件,然后再尝试使用它们。

几点注意事项:


NullPointerException通常很容易修复。只需查看stacktrace(它指示NPE所在的行),然后看看什么可以为null以及为什么在此行。
不要使用原始的迭代器,而要使用通用的迭代器(Iterator<Person> it = set.iterator();),这样可以避免转换由next()调用返回的对象。
由于您只读取集合中的元素,因此可以简单地使用for-each循环for(Person p : cont1.returnTeachers()) comboTeacher.addItem(p.getName());

07-24 09:23