我正在尝试为一个简单的计算器编写一个程序,只需添加两个数字并将其显示在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);
}
}
答案 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);
...