使用Java Swing调用setText()方法时出现空指针错误求助
问题分析与解决
错误原因很明确:你在类中声明了成员变量private JLabel label;,但在构造函数里创建了同名的局部变量,导致成员变量从未被初始化,始终为null。当按钮点击触发actionPerformed方法时,调用label.setText()自然会抛出空指针异常。
具体来说,构造函数里的这行代码:
JLabel label = new JLabel("Number of times clicked: ");
这里的label是局部变量,只在构造函数内部有效,和类的成员变量label完全是两个东西。类的成员变量label依然是默认的null值。
修复步骤
只需要去掉构造函数中局部变量的类型声明,直接给类的成员变量赋值即可:
- 构造函数中,将
JFrame frame = new JFrame();改为frame = new JFrame(); - 将
JButton b = new JButton("Click here! :) ");改为b = new JButton("Click here! :) "); - 关键修复:将
JLabel label = new JLabel("Number of times clicked: ");改为label = new JLabel("Number of times clicked: ");
修正后的完整代码
import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class firstGui implements ActionListener { private int count = 0; private JLabel label; private JFrame frame; private JButton b; public firstGui() { // 初始化成员变量frame,不再创建局部变量 frame = new JFrame(); JPanel panel1 = new JPanel(); panel1.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30)); panel1.setLayout(new GridLayout(0, 1)); frame.add(panel1, BorderLayout.CENTER); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setTitle("Here is our first GUI!"); frame.pack(); frame.setVisible(true); // 初始化成员变量b b = new JButton("Click here! :) "); panel1.add(b); b.addActionListener(this); // 初始化成员变量label(关键修复) label = new JLabel("Number of times clicked: "); panel1.add(label); } public static void main(String[] args) { firstGui user1 = new firstGui(); } @Override public void actionPerformed(ActionEvent e) { count++; label.setText("Number of times clicked: " + count); } }
内容的提问来源于stack exchange,提问作者roTenshi2
相关产品推荐
相关产品推荐

