使用Combobox.removeAllItems()时出现问题;方法

时间:2015-03-01 01:18:12

标签: java swing combobox

我希望我的问题非常基本,但它让我发疯:(

我上传了一个问题视频 https://www.youtube.com/watch?v=dd8Qg5DFMpg&feature=youtu.be

我使用jXDatePicker选择日期,并在组合框中添加员工ID列表。第一次,代码运行顺利。但是,当我在jXDatePicker上第二次选择日期时,它会抛出空指针异常。第三次代码再次正常工作,但是当我从组合框中选择一个值时,员工姓名没有填充到文本框中。奇怪的是,组合框中的employeeIds正在填充。我已经跟踪了下面的removeallitems()组合框行的问题,因为当我删除这一行时,它不会抛出空指针异常。

以下是datepicker和combobox的动作事件代码。 组合框命名为empbx。

private void jXDatePicker1ActionPerformed(java.awt.event.ActionEvent evt)    {                                              
    // TODO add your handling code here:

    empbx.removeAllItems();/////THIS LINE OVER HERE
    d = jXDatePicker1.getDate();
          emp1=ControllerClass.searchEmpAvalibility(String.valueOf(d.getDay()));


    for (Employee e : emp1) {
        if (e != null) {


                empbx.addItem(e.getEmployeeId());

        }
    }
    //unrelated code
    //TableClean();
    //TableuncheckEmp();
    //TableFill();

}

private void empbxActionPerformed(java.awt.event.ActionEvent evt) {                                      
    // TODO add your handling code here:
    emp=ControllerClass.getEmployees();
    Object s = empbx.getSelectedItem();
    for (Employee e : emp) {
        if (e != null) {
            if (Integer.parseInt(s.toString()) == e.getEmployeeId()) {
                empftxt.setText(e.getFirstName());
                empltxt.setText(e.getLastName());
            }
        }
    }
} 

错误日志:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at newnapit.ScheduleGUI.empbxActionPerformed(ScheduleGUI.java:855)
    at newnapit.ScheduleGUI.access$800(ScheduleGUI.java:42)
    at newnapit.ScheduleGUI$9.actionPerformed(ScheduleGUI.java:407)
    at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1258)
    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:174)
    at javax.swing.JComboBox.removeAllItems(JComboBox.java:771)
    at newnapit.ScheduleGUI.jXDatePicker1ActionPerformed(ScheduleGUI.java:830)
    at newnapit.ScheduleGUI.access$900(ScheduleGUI.java:42)
    at newnapit.ScheduleGUI$10.actionPerformed(ScheduleGUI.java:415)
    at org.jdesktop.swingx.JXDatePicker.fireActionPerformed(JXDatePicker.java:911)
    at org.jdesktop.swingx.JXDatePicker.commitEdit(JXDatePicker.java:740)
    at org.jdesktop.swingx.plaf.basic.BasicDatePickerUI.commit(BasicDatePickerUI.java:914)
    at org.jdesktop.swingx.plaf.basic.BasicDatePickerUI$Handler.monthViewActionPerformed(BasicDatePickerUI.java:1504)
    at org.jdesktop.swingx.plaf.basic.BasicDatePickerUI$Handler.actionPerformed(BasicDatePickerUI.java:1479)
    at org.jdesktop.swingx.JXMonthView.fireActionPerformed(JXMonthView.java:1845)
    at org.jdesktop.swingx.JXMonthView.commitSelection(JXMonthView.java:1732)
    at org.jdesktop.swingx.plaf.basic.BasicMonthViewUI$Handler.mouseReleased(BasicMonthViewUI.java:1753)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

2 个答案:

答案 0 :(得分:0)

我认为如果您使用DefaultComboBoxModel并使用removeAllElements()方法可以正常工作。 您可以尝试使用此代码

 DefaultComboBoxModel d=(DefaultComboBoxModel) jComboBox1.getModel();
 d.removeAllElements();

希望这是有帮助的

答案 1 :(得分:0)

显然我有一个两岁的心理能力。这不是导致问题的删除所有项目方法。正如@JB Nizet指出的那样,问题在于抛出了对象。

private void empbxActionPerformed(java.awt.event.ActionEvent evt) {                                      
// TODO add your handling code here:
emp=ControllerClass.getEmployees();
Object s = empbx.getSelectedItem();
for (Employee e : emp) {
    if (e != null) {
        if (Integer.parseInt(s.toString()) == e.getEmployeeId()) {//This line over here
            empftxt.setText(e.getFirstName());
            empltxt.setText(e.getLastName());
        }
    }
}

}

所以我把它改成了:

private void empbxActionPerformed(java.awt.event.ActionEvent evt) {                                      
    // TODO add your handling code here:
    String ss="0";
    emp=ControllerClass.getEmployees();
    Object s = empbx.getSelectedItem();
    if(s!=null) {ss=s.toString();}
    //JOptionPane.showMessageDialog(null, "Invalid Information");
    for (Employee e : emp) {
        if (e != null) {
            if (Integer.parseInt(ss)==e.getEmployeeId()) {
                empftxt.setText(e.getFirstName());
                empltxt.setText(e.getLastName());
            }
        }
    }
}

现在它工作正常。谢谢大家。

相关问题