NullPointerException przy pobieraniu elementu z JComboBox choć wskazuję na niego.

0

Hej :)

Siedzę nad tym trzeci dzień i w zasadzie nie wiem już jak ugryźć temat. Aby nie nabijać tematów cały czas tutaj, zapytałem gdzieś indziej, ale już drugi dzień osoby, które starały się mi pomóc - nie mogą znaleźć rozwiązania.

Obrazkowo, chcę podpiąć operacje pod ten element GUI: https://www.dropbox.com/s/px0crr6k3tksa0g/the_problem.png

JComboBox z obrazka ma dwa elementy - Fedora 19 i Fedora 20. Po kliknięciu przycisku Start Upgrade, przycisk powinien sprawdzić, który element listy został wybrany i dostosować pod niego akcję - inną dla każdego z obu elementów.

Niemniej z komunikatów wychodzi na to, że JComboBox nie zwraca elementów (null), a ja nie mam już pomysłu, jak to rozwiązać. Przeglądałem tutoriale w sieci i tam te metody działają.

Kod JComboBoxa i przycisku Start Upgrade:

//ADDING LIST WITH FEDORA VERSIONS  
        String[] fedoras = { "Fedora 19", "Fedora 20" };  
        JComboBox fedora_list = new JComboBox(fedoras);  
        fedora_list.setSelectedIndex(0);  
        fedora_list.setBounds(120,170, 170,25);  
        fedora_list.addActionListener(this);  
        this.add(fedora_list);  
          
        //ADDING UPDATE BUTTON  
        update = new JButton("Start upgrade");  
        update.setBounds(0,0,100,50);  
        update.setBounds(120,200, 170,25);  
        update.addActionListener(this);s  
        update.setActionCommand("update");  
        this.add(update);  

Kod ustawiania akcji:

//TRIGGERING ACTION_EVENT
	public void actionPerformed(ActionEvent e){
		String cmd = e.getActionCommand();
			if ("exit".equals(cmd)) {
				dispose();
			}
(...)			
			else if ("update".equals(cmd)){
		String selectedFedora = (String) fedora_list.getSelectedItem();  
                if (selectedFedora.equals("Fedora 19")) {  
                    try {  
                        String[] command = { "xterm", "-e","su -c'fedup-cli --network 19'" };  
                        Runtime.getRuntime().exec(command);  
                    } catch (IOException e2) {  
                        // TODO Automatycznie generowany blok catch  
                        e2.printStackTrace();  
                    }  
                }  
            }
         }

Teoretycznie wskazuję, że mają być pobierane elementy z fedora_list (JComboBox) - niestety po kliknięciu przycisku Start Upgrade, wyrzucane są błędy:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at KFUpdate.actionPerformed(KFUpdate.java:98)
	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)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6516)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3311)
	at java.awt.Component.processEvent(Component.java:6281)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4872)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4698)
	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:4698)
	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)

Jeśli potrzebny byłby pełny kod, znajduje się tutaj: http://pastebin.com/ugQ09Vyt

Byłbym wdzęczny za wskazanie, czego jeszcze trzeba, aby przycisk Upgrade odwołał się do JComboBoxa, sprawdził jaki element z listy jest wybrany i dostosował do niego akcję. Aktualnie nie wiem - wskazuję na tę listę, a zwracany jest wynik, jakby fedora_list nie miało elementów, a ma dwa - Fedorę 19 i 20 :(

0

No bez żartów. Masz nawet podane w której linijce jest bląd! W swoim konstruktorze zamiast nadać wartość polu fedora_list utworzyłeś nową, lokalną zmienną o tej nazwie w efekcie poza konstruktorem pole fedora_list jest nadal nullem.

0

Żarty lub bez żarów, ale Javę znam jakoś od 3 tygodni może, ale nie czuję się gorszy z tego powodu, bo KAŻDY kiedyś był na tym etapie, co ja (nawet Ty) ;-P

Przynajmniej wiem, gdzie tkwi błąd, dziękuję.

0

Ale juz masz bardzo złe nawyki! Pierwsze co powinieneś zrobić w tej sytuacji to postawić breakpoint przed miejscem gdzie program sie wysypał i odpalić go z debuggerem. Od razu wiedziałbyś gdzie jest problem...

0

Tak też zrobiłem, jednak brak wiedzy nie pozwolił mi mimo wszystko załapać, dlaczego zwracany jest null (tj. jak to naprawić).

1 użytkowników online, w tym zalogowanych: 0, gości: 1