You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing实现点击按钮数值加1功能及NullPointerException报错解决

报错原因

你遇到的空指针异常由3个核心问题导致:

  1. txtpnClicks是构造方法内部的局部变量,类的其他方法无法访问,所以调用时识别为null
  2. 按钮点击事件中调用的方法名是myMethod(),但你实际定义的计数方法叫add1(),二者不匹配
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 03:36:03