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

JTable删除/添加数据后重绘报ArrayIndexOutOfBoundsException异常求助

解决JTable删除后重新填充时的ArrayIndexOutOfBoundsException问题

你遇到的这个删除后刷新表格触发数组越界的问题,我帮你梳理出代码里的几个关键错误点,逐个修复就能解决:

1. Modell类getColumnClass方法的两处致命错误

你的表格一共6列(columnName数组长度为6),列索引是0到5,但代码里犯了两个错误:

  • 错误判断图标列是column == 6,本身就超出了列索引范围;
  • 当表格没有数据(删除后list为空)时,getValueAt(0, column)会直接访问空数组的第0行,这就是错误栈里ArrayIndexOutOfBoundsException: 0的直接原因。

修复后的getColumnClass方法:

@Override 
public Class getColumnClass(int column){ 
    // 图标列是第5列(索引从0开始计数)
    if (column == 5){ 
        return Icon.class; 
    } 
    // 表格无数据时返回默认Object类,避免访问空行
    if(getRowCount() == 0){
        return Object.class;
    }
    return getValueAt(0, column).getClass(); 
} 

2. table_order方法中图标列赋值错误

在处理无图片的情况时,你错误地把rows[i][4](这是"Availability"列)设为null,应该修改为对应Icon列的rows[i][5]:

if(list.get(i).getMyImage() != null){ 
    ImageIcon image = new ImageIcon(new ImageIcon(list.get(i).getMyImage()).getImage() 
            .getScaledInstance(150, 75, Image.SCALE_SMOOTH) ); 
    rows[i][5] = image; 
} else{ 
    // 修正为第5列(Icon列)
    rows[i][5] = null; 
} 

3. 删除按钮中多余的removeAll调用

table_item.removeAll();完全没必要,因为setModel(model)会直接替换表格的数据源模型,重新渲染所有数据,这个调用反而可能干扰表格的正常渲染流程,直接删除即可。

额外建议:修复SQL注入风险

你的SQL语句直接拼接用户输入的codev,存在严重的SQL注入风险,改成预编译语句的参数绑定写法更安全:

// 删除操作的正确写法
ps = conn.prepareStatement("DELETE FROM items WHERE item_code=?");
ps.setString(1, codev);
int row = ps.executeUpdate();

查询数据是否存在的语句也应该改成这种参数绑定的形式。

把这些修复点全部处理后,再测试删除操作,应该就不会再触发数组越界异常了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:20:59