Почему я всегда получаю это исключение? - PullRequest
0 голосов
/ 30 июня 2011

Я разработал приложение с графическим интерфейсом, с кнопками, относительными ActionListeners и исключениями. Сегодня у меня была эта проблема. В actionEvent относительно кнопки моего графического интерфейса я вставил этот код с некоторыми JOptionPane.showInputDialog:

public void actionPerformed(ActionEvent ae){

 if(ae.getSource()==b1){
 try{//FIRST `JOptionPane.showInputDialog`
   int load = Integer.parseInt(JOptionPane.showInputDialog(null,"Insert current load value: "));
   auto.setCurrentLoad(load);
   //other `JOptionPane.showInputDialog`
 int choiceDep = Integer.parseInt(JOptionPane.showInputDialog(null, "Does the truck transport perishable goods? 1: YES 2: NO"));
 if(choiceDep==1) {
   //here we have to insert expiration date
   int day = Integer.parseInt(JOptionPane.showInputDialog(null,"Insert value"));
  int month = Integer.parseInt(JOptionPane.showInputDialog(null,"Insert value"));
  int year = Integer.parseInt(JOptionPane.showInputDialog(null,"Insert value"));
  auto.setPerishable(day,month,year);
 }
 else if(choiceDep==2) 
                 auto.setNotPerishable();

String choiceAv = JOptionPane.showInputDialog(null, "Available Truck? Yes or no?");
 if(choiceAv.equals("Yes")) auto.setAvailable();
 else auto.setNotAvailable();

}
        //the exception      
    catch (Exception e) { System.out.println("Exception!");}             
  }

Где setAvailable, setNotAvailable,setPerishable,setCurrentLoad - методы внешнего класса со ссылкой auto.

Когда я выполняю этот код, появляется GUI, затем я нажимаю кнопку b1. Появляется первый JOptionPane.showInputDialog, чтобы вставить значение, хранящееся в int load.

Я ввел значение, но никаких других JOptionPane.showInputDialog не появилось (но есть другие диалоги ввода), и я получил исключение в командной строке. Я заметил, что значение, вставленное в JOptionPane.showInputDialog, никогда не передается в строку auto.setCurrentLoad(load);.

Почему это происходит? Никогда не видел эту ошибку раньше. Почему я всегда получаю исключение сразу после первого JOptionPane.showInputDialog Может быть, JVM не принимает многие из этих JOptionPane.showInputDialog в одном выражении / методе? Или, может быть (как я думаю) моя ошибка программирования?

Спасибо за вашу помощь. Приветствия.

РЕДАКТИРОВАТЬ: я забыл вставить исключение, которое я получил в командной строке:

java.lang.NullPointerException
        at AutoCom.actionPerformed(AutoCom.java:50)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown So
ce)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Скорее всего, объект auto не инициализирован до того, как вы нажали кнопку.Я предполагаю, что auto является переменной-членом класса AutoCom.В этом случае вам, вероятно, следует изменить определение auto на:

protected <TypeOfAutoHere> auto = new <TypeOfAutoHere>();
1 голос
/ 30 июня 2011

Исходя из вашего описания, похоже, что автоматическая переменная равна нулю.

...