Dando18
Dando18

Reputation: 47

JComboBox Item Listener Selected Item

I am creating a combo box and it keeps giving me an error with the item listener that I don't understand. If you could also explain your answer that would be nice. Thanks in advance:

Here's the item listeners for the combo boxes:

combo1.addItemListener(new ItemListener(){
            @Override
            public void itemStateChanged(ItemEvent e){
               if(e.getStateChange() == ItemEvent.SELECTED){
                  JComboBox localCombo = (JComboBox)e.getSource();
                  ic1[0] = localCombo.getSelectedItem().toString();     
               }  
            }
        });
        combo2.addItemListener(new ItemListener(){
            @Override
            public void itemStateChanged(ItemEvent e){

                if(e.getStateChange() == ItemEvent.SELECTED){
                    JComboBox localCombo = (JComboBox)e.getSource();
                    ic1[1] = localCombo.getSelectedItem().toString();
                }
            }
        });

The error says it is on the .getSelectedItem()... lines. It only gives me the error when I run the program and select a word in the box. Thanks!

Here's the error in the run (line 61 is the .getSelectedItem()... line):

    run:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at thisprogramisforfun.guiClasses.guiClassConversions$1.itemStateChanged(guiClassConversions.java:61)
    at javax.swing.JComboBox.fireItemStateChanged(JComboBox.java:1225)
    at javax.swing.JComboBox.selectedItemChanged(JComboBox.java:1282)
    at javax.swing.JComboBox.contentsChanged(JComboBox.java:1329)
    at javax.swing.AbstractListModel.fireContentsChanged(AbstractListModel.java:118)
    at javax.swing.DefaultComboBoxModel.setSelectedItem(DefaultComboBoxModel.java:93)
    at javax.swing.JComboBox.setSelectedItem(JComboBox.java:578)
    at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:624)
    at javax.swing.plaf.basic.BasicComboPopup$Handler.mouseReleased(BasicComboPopup.java:835)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:290)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at javax.swing.plaf.basic.BasicComboPopup$1.processMouseEvent(BasicComboPopup.java:499)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Upvotes: 1

Views: 12818

Answers (2)

camickr
camickr

Reputation: 324098

The error says it is on the .getSelectedItem()... lines

So you only have two varaibles on that line:

  1. The ic1 array
  2. the localCombo variable

Do you know how to use System.out.println(...) to display the value of those variables?

My guess in the ici array is not initialized, since you get the localCombo variable from the event source.

Upvotes: 1

Hovercraft Full Of Eels
Hovercraft Full Of Eels

Reputation: 285405

Your problem is here:

combo1 = (JComboBox)e.getSource();
ic1[0] = combo2.getSelectedItem().toString();

You're getting combo1 but calling a method on combo2

Better would be this:

combo1 = (JComboBox)e.getSource();
ic1[0] = combo1.getSelectedItem().toString();

But even better, use a local variable for this sort of work, not a field.

JComboBox localCombo = (JComboBox)e.getSource();
ic1[0] = localCombo.getSelectedItem().toString();

Upvotes: 2

Related Questions