【发布时间】:2013-12-13 00:37:05
【问题描述】:
我有一个组合框,它使用带有监听器的模型来捕获所选项目:
deleteCombo = new JComboBox<Course>(course.toArray(new Course[course.size()]));
model = new DefaultComboBoxModel<Course>( course.toArray(new Course[course.size()]) );
deleteCombo.setModel( model );
deleteCombo.setRenderer(renderer);
deleteCombo.setSelectedIndex(0);
deleteCombo.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e)
{
JComboBox deleteCombo = (JComboBox)e.getSource();
Course course = (Course)deleteCombo.getSelectedItem();
deleteNumTxt.setText( course.getCourseNum() ); //This is line 391
deleteTitleTxt.setText( course.getCourseTitle() );
deleteDurationTxt.setText( String.valueOf(course.getDuration() ) );
deleteFeeTxt.setText("$" + String.valueOf(course.getCourseFee() ) );
deleteLevelTxt.setText( course.getCourseLevel() );
}
});
我正在使用 itemSelected 事件来填充 GUI 中的文本字段,以显示所选课程的详细信息。选择课程并单击“删除课程”按钮后,将转到此方法:
public static void deleteCourseRecord() {
courseNumIn = deleteNumTxt.getText();
int index = course.indexOf(new Course(courseNumIn));
course.remove(index);
//RE-POPULATE EDIT AND DELETE COMBOBOXES
model.removeAllElements();
for(Course item : course) {
model.addElement(item);
}
}
记录被删除但抛出此异常:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at MyCourse$2.actionPerformed(MyCourse.java:391)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1260)
at javax.swing.JComboBox.contentsChanged(JComboBox.java:1331)
at javax.swing.JComboBox.intervalRemoved(JComboBox.java:1351)
at javax.swing.AbstractListModel.fireIntervalRemoved(AbstractListModel.java:179)
at javax.swing.DefaultComboBoxModel.removeAllElements(DefaultComboBoxModel.java:175)
at MyCourse$Course.deleteCourseRecord(MyCourse.java:1138)
at MyCourse.actionPerformed(MyCourse.java:883)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
tjavax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
我认为构建 actionPerformed 部分的方式存在问题,但我不知道它是什么。如果我不使用模型(或任何其他方法)刷新组合框,它不会抛出异常。如果我注释掉第 391 行(在代码中标记),它将在第 392 行抛出异常,依此类推。如果填充文本字段的所有代码行都被注释掉,它不会抛出异常,但当然,函数会丢失。关于我做错了什么的任何想法?干杯
【问题讨论】:
-
第 391 行是哪一行
-
deleteNumTxt.setText(course.getCourseNum()); //这是第391行
-
那么 deleteNumTxt 或 course 没有被实例化。 deleteNumTxt 设置在哪里?从您发布的代码看起来它是空的
-
course定义在哪里? -
对不起,我只发布了我认为相关的部分。它在组合框上方设置了许多行。当我不使用任何刷新组合框的方法时,代码可以工作,但会导致其他问题,例如在编辑功能中。
标签: java swing actionlistener jcombobox