2013-11-08 3 views
0

Я создаю поле со списком, и он продолжает давать мне ошибку с прослушивателем элемента, который я не понимаю. Если бы вы могли объяснить свой ответ, было бы неплохо. Заранее спасибо:JComboBox Item Listener Selected Item

Вот на запись слушателей для полей со списком:

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(); 
       } 
      } 
     }); 

ошибка говорит, что это на .getSelectedItem() ... линии. Это только дает мне ошибку, когда я запускаю программу и выбираю слово в поле. Благодаря!

Вот ошибка в счете (строка 61 является .getSelectedItem() ... линия):

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) 

ответ

1

Ваша проблема здесь:

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

Вы получаете Combo1 но вызов метода на combo2

Лучше бы это:

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

Но даже лучше используйте локальную переменную для такого рода работ, а не поле.

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

По-прежнему дает мне ошибку – Dando18

+0

@ user2958560: пожалуйста, добавьте свой новый код в качестве редактирования исходного вопроса. Пожалуйста, добавьте его в конец вашего текущего вопроса/код/​​сообщение об ошибке. Пожалуйста, сообщите нам, если сообщение об исключении было изменено, и просьба указать с очевидным комментарием в вашем коде, где происходит исключение, например: // исключение **** в этой строке ***. –

1

ошибка говорит, что это на .getSelectedItem() ... линий

Так у вас есть только два varaibles на этой линии:

  1. IC1 массива
  2. localCombo переменная

Вы знаете, как использовать System.out.println (...) для отображения значения этих переменных?

Моя догадка в массиве ici не инициализирована, так как вы получаете переменную localCombo из источника события.