【问题标题】:JFrame Error java.lang.nullpointerexceptionJFrame 错误 java.lang.nullpointerexception
【发布时间】:2013-08-20 02:13:30
【问题描述】:

我一直在尝试创建 JFrame 计算器,但收到错误 java.lang.nullpointer.exception。它说我在我说的那一行有问题:

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


    }

}

【问题讨论】:

  • 请粘贴整个堆栈跟踪,以及对应的行号。
  • 它应该在方法 GuiCalc() 中显示附加行号

标签: java swing nullpointerexception jframe calculator


【解决方案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 尚未初始化。

【讨论】:

  • 即使label3为null,是否会抛出nullpointer异常?
  • 是的,你怎么可能将null 值添加到容器中?这没有意义(无论如何对我来说)
  • 我这样做了,现在它给了我相同的错误消息,除了现在消失的底线
【解决方案2】:

正如MadProgrammer 所说,在您调用add 时,您还没有初始化label3JFrame 继承自 java.awt.Component,其 add(Compontent comp) 方法 throws an exception if passed a null argument。确保在 add 之前构造 JLabel

【讨论】:

    【解决方案3】:

    在将 label3 添加到此之前,您需要为其分配一个值:

    label3 = new JLabel("");
    

    label3 = null;
    if (label3 != null) this.add(label3);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-19
      • 2013-07-28
      • 2013-10-14
      • 2017-04-23
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多