Java Swing实现点击按钮数值加1功能及NullPointerException报错解决
报错原因
你遇到的空指针异常由3个核心问题导致:
txtpnClicks是构造方法内部的局部变量,类的其他方法无法访问,所以调用时识别为null- 按钮点击事件中调用的方法名是
myMethod(),但你实际定义的计数方法叫add1(),二者不匹配 add1()方法中变量名写错,多打了一个e,写为了textpnClicks,和实际变量名txtpnClicks不匹配
修复步骤
- 将
JTextPane txtpnClicks提升为类的成员变量,和contentPane同级声明 - 统一方法名,按钮点击事件调用的方法和实际定义的计数方法保持一致
- 修正变量名拼写错误,去掉不必要的
static修饰符(计数属于窗口实例属性,不需要定义为类静态属性) - 修正setText的文本格式,和初始显示格式保持一致
修复后完整代码
import java.awt.Color; import java.awt.EventQueue; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextPane; import javax.swing.border.EmptyBorder; @SuppressWarnings("serial") public class jframe extends JFrame { private JPanel contentPane; // 将txtpnClicks提升为成员变量 private JTextPane txtpnClicks; // 计数变量改为实例成员,初始值设为0,第一次点击后变为1符合常规计数逻辑,要保持原来初始1也可以自行修改 private int x = 0; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { jframe frame = new jframe(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public jframe() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBackground(Color.WHITE); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); JLabel lblNewLabel = new JLabel(" PRESS THE BUTTON TO GET CLICKS"); lblNewLabel.setFont(new Font("Sitka Small", Font.PLAIN, 15)); lblNewLabel.setBounds(29, 71, 382, 34); contentPane.add(lblNewLabel); JButton btnNewButton = new JButton("CLICK ME"); btnNewButton.setFont(new Font("Tahoma", Font.PLAIN, 14)); btnNewButton.setForeground(Color.DARK_GRAY); btnNewButton.setBackground(Color.CYAN); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // 调用正确的方法名 add1(); } }); btnNewButton.setBounds(153, 139, 116, 42); contentPane.add(btnNewButton); // 给成员变量赋值,不再是局部变量 txtpnClicks = new JTextPane(); txtpnClicks.setForeground(Color.GRAY); txtpnClicks.setText(" CLICKS:"+x); txtpnClicks.setFont(new Font("Sylfaen", Font.PLAIN, 15)); txtpnClicks.setBounds(86, 189, 275, 28); contentPane.add(txtpnClicks); } void add1() { x++; // 修正变量名和文本格式 txtpnClicks.setText(" CLICKS:"+x); } }
内容的提问来源于stack exchange,提问作者CactiProgrammer
相关产品推荐
相关产品推荐

