Java:线程“AWT-EventQueue-0”中的异常java.lang.NullPointerException?

时间:2016-06-13 19:41:28

标签: java swing nullpointerexception

我正在尝试为一个简单的计算器编写一个程序,只需添加两个数字并将其显示在JLabel中。我设法设计了一个工作窗口,按钮等。但如果我在线程"AWT-EventQueue-0" java.lang.NullPointerException中单击按钮异常 - 错误发生,我不知道如何解决它。

以下是代码:

import java.awt.EventQueue;

public class Rechnerwin {

private JFrame frame;
private JTextField textFielda;
private JTextField textFieldb;
private JLabel label;
int A;
int B;
int C;
String a;
String b;
String c;


public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Rechnerwin window = new Rechnerwin();
                window.frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }); 
}

public Rechnerwin() {

    initialize();
}


private void initialize() {
    frame = new JFrame();
    frame.setBounds(100, 100, 450, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);

    textFielda = new JTextField();
    textFielda.setBounds(44, 41, 86, 20);
    frame.getContentPane().add(textFielda);
    textFielda.setColumns(10);

    textFieldb = new JTextField();
    textFieldb.setBounds(307, 41, 86, 20);
    frame.getContentPane().add(textFieldb);
    textFieldb.setColumns(10);

    JButton btnAdd = new JButton("Add");
    btnAdd.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {

            String a = textFielda.getText();
            String b = textFieldb.getText();
            int A = Integer.parseInt(a);
            int B = Integer.parseInt(b);
            int C = A + B;
            String c = Integer.toString(C);
            label.setText(c);
        }
    });
    btnAdd.setBounds(169, 85, 89, 23);
    frame.getContentPane().add(btnAdd);

    JLabel label = new JLabel("a");
    label.setBounds(146, 184, 131, 20);
    frame.getContentPane().add(label);
  }
}

2 个答案:

答案 0 :(得分:0)

尝试在Button

中的监听器之前移动标签

实施例

JLabel label = new JLabel("a");
label.setBounds(146, 184, 131, 20);
frame.getContentPane().add(label);

JButton btnAdd = new JButton("Add");
btnAdd.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {

    String a = textFielda.getText();
    String b = textFieldb.getText();
    int A = Integer.parseInt(a);
    int B = Integer.parseInt(b);
    int C = A + B;
    String c = Integer.toString(C);
    label.setText(c);
    }
    });

答案 1 :(得分:0)

问题可能在于,在侦听器中,您尝试为label类的成员Rechnerwin设置文本。但是这个成员从未被初始化。在添加按钮侦听器之后,您将向您的UI添加 new JLabel,其名称与您的成员label相同。但这些是两个不同的变量,只有本地变量才被初始化。

您可能会通过此更改解决此问题:

...
label = new JLabel("a");
label.setBounds(146, 184, 131, 20);
...