2013-08-20 3 views
0

Я пытался создать калькулятор JFrame, но получаю ошибку java.lang.nullpointer.exception. Он говорит, что у меня есть проблемы в линии, где я говорю:Ошибка JFrame java.lang.nullpointerexception

GuiCalc go = new GuiCalc(); 

Вот весь код:

package home.personalprojects.jordan; 

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.*; 

public class GuiCalc extends JFrame 
{ 

    private JButton calculate; 
    private JTextField num1field, num2field; 
    private JComboBox operationbox; 
    private JLabel label1, label2, label3; 
    private String[] operationposs = {"+", "-", "*", "/"}; 
    String operation; 
    int num1, num2, answer; 

    public GuiCalc(){ 

     super("Calculator"); 
     setLayout(new FlowLayout()); 

     operationbox = new JComboBox(operationposs); 

     calculate = new JButton("Calculate"); 
     calculate.setToolTipText("Enter Two Numbers And Then Select An Operation To Find An Answer"); 

     label1 = new JLabel("Number 1: "); 
     num1field = new JTextField("", 10); 
     label2 = new JLabel("Number 2: "); 
     num2field = new JTextField("", 10); 

     operationbox.addItemListener(
      new ItemListener(){ 
       public void itemStateChanged(ItemEvent event){ 
        if(event.getStateChange() == ItemEvent.SELECTED){ 

         int temp; 
         temp = operationbox.getSelectedIndex(); 
         switch(temp){ 
         case 0: 
          answer = num1 + num2; 
         case 1: 
          answer = num1 - num2; 
         case 2: 
          answer = num1 * num2; 
         case 3: 
          answer = num1/num2; 

        } 
       } 
      } 
     }); 


     calculate.addActionListener(
      new ActionListener(){ 
       public void actionPerformed(ActionEvent event){ 
        JOptionPane.showMessageDialog(null, String.format("The Answer: " + answer, event.getActionCommand())); 
       } 
      } 
     ); 

     add(label1); 
     add(num1field); 
     add(label2); 
     add(operationbox); 
     add(label3); 
     add(num2field); 
     add(calculate); 

    } 

    public static void main(String[] args) 
    { 

     GuiCalc go = new GuiCalc(); 
     go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     go.setSize(500,500); 
     go.setVisible(true); 


    } 

} 
+0

Пожалуйста, вставьте всю трассировку стеки, наряду с тем, что номера строк соответствуют. –

+0

Он должен указать дополнительный номер строки в методе GuiCalc() –

ответ

1

Когда я запускаю свой код, я получаю ...

Exception in thread "main" java.lang.NullPointerException 
    at java.awt.Container.addImpl(Container.java:1086) 
    at java.awt.Container.add(Container.java:998) 
    at javax.swing.JFrame.addImpl(JFrame.java:562) 
    at java.awt.Container.add(Container.java:410) 
    at testcalc.TestCalc.<init>(TestCalc.java:79) 
    at testcalc.TestCalc.main(TestCalc.java:87) 

что указывает на

add(label3); 

которые предполагают, что label3 не инициализирован.

+0

Даже label3 имеет значение null, он даст исключение nullpointer? –

+0

Да, как вы могли добавить значение «null» в контейнер? Это не имеет смысла (для меня все равно) – MadProgrammer

+0

Я сделал это, и теперь он дает мне то же сообщение об ошибке, за исключением нижней строки, которая сейчас ушла – user2280906

0

Как указано в MadProgrammer, вы не инициализировали label3 к тому времени, как вы позвонили add. JFrame наследует от java.awt.Component, чей метод add(Compontent comp)throws an exception if passed a null argument. Обязательно создайте JLabel до add.

0

Вам необходимо присвоить значение LABEL3, прежде чем добавить его к этому:

label3 = new JLabel(""); 

или

label3 = null; 
if (label3 != null) this.add(label3); 
Смежные вопросы