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

NetBeans国际象棋程序中substring()抛出NullPointerException求助

解决你的国际象棋程序NullPointerException问题

嘿,我来帮你搞定这个空指针异常的问题!先理清楚问题出在哪:

首先,NullPointerException的直接原因

你代码里的newButton是从but.getName()赋值来的,如果你的JButton没有设置name属性,那but.getName()会返回null,这时候调用newButton.substring(...)就会直接抛出NullPointerException——因为你不能对一个null对象调用任何方法。

其次,还有个隐藏的坑:substring(1,1)的问题

就算按钮name没问题,substring(1,1)也会返回一个空字符串,因为这个方法的规则是「起始索引包含,结束索引不包含」,所以从索引1到1的区间没有字符,空字符串传给Integer.parseInt()会抛出NumberFormatException,这也是你后续会遇到的问题。

一步步解决问题:

  • 第一步:确保所有按钮都设置了name属性
    在你创建棋盘格JButton的时候,一定要调用setName()给每个按钮赋予正确的名称,比如像button.setName("a1")、button.setName("h8")这样的格式(字母列+数字行)。如果没设置,but.getName()就会是null,直接触发空指针。

    你可以先在代码里加个安全检查,快速排查这个问题:

    static void pawnMovement(JButton but){ 
        String buttonName = but.getName(); 
        // 先检查按钮名称是否为null
        if (buttonName == null) {
            System.out.println("警告:这个按钮没有设置名称!");
            return; // 提前退出,避免后续报错
        }
        String newButton = buttonName; 
        // 后续代码...
    }
    
  • 第二步:修复substring的索引错误
    假设你的按钮名称是「字母+数字」的格式(比如"a1"),要提取数字部分的话,应该用substring(1)(从索引1开始截取到字符串末尾),而不是substring(1,1)。修改后的代码:

    int verticalValue = Integer.parseInt(newButton.substring(1));
    

    如果你的按钮名称格式是「数字+字母」(比如"1a"),那就要改成substring(0,1)来提取数字部分,根据你的实际命名规则调整就行。

  • 第三步:额外的安全防护(可选但推荐)
    为了避免按钮名称格式错误导致的数字解析异常,可以加个try-catch块:

    try {
        int verticalValue = Integer.parseInt(newButton.substring(1));
        // 这里写你的兵移动逻辑
    } catch (NumberFormatException e) {
        System.out.println("按钮名称格式不对,无法解析数字:" + newButton);
    }
    

按照这几步调整,应该就能解决你的空指针问题,同时避免后续的格式解析错误啦!

内容的提问来源于stack exchange,提问作者dunno

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:31:11