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 :(