【问题标题】:ArrayIndexOutOfBoundsException: 2 >= 1 on for eachArrayIndexOutOfBoundsException: 2 >= 1 on for each
【发布时间】:2015-10-27 14:36:43
【问题描述】:

我是 Java 新手,我正在编写一个使用一些 JTables 的程序。 我有一个按钮来删除选定的行,它执行这个:

public static void removerows() {
    int[] row_indexes = TableCA.table.getSelectedRows();
    for(int i=0;i<row_indexes.length;i++) {
        TableCA.model.removeRow(row_indexes[i]);
    }
}

但是当它执行时,我得到了这个错误:

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 1
    at java.util.Vector.removeElementAt(Vector.java:554)
    at javax.swing.table.DefaultTableModel.removeRow(DefaultTableModel.java:463)
    at fr.diagamma.project.PanelCaisse.removerows(PanelCaisse.java:78)

我搜索了很多,但没有找到任何关于 OutOfBounds 的案例。 感谢您的帮助!

【问题讨论】:

  • 看起来你有一个Vector,而不是一个二维结构。
  • 是什么意思? :c
  • selectedRows 是从 1 开始编号还是从​​ 0 开始编号?
  • @schtever 我认为是 1,不确定,但第一列是 1,所以我也假设第一行

标签: java foreach jtable indexoutofboundsexception


【解决方案1】:

我的建议是你把循环的顺序倒过来:

public static void removerows() {
    int[] row_indexes = TableCA.table.getSelectedRows();
    for(int i=row_indexes.length - 1; i >= 0; i--) {
        TableCA.model.removeRow(row_indexes[i]);
    } 
}

这从最后一个元素开始,直到到达第一个元素。

因为,除非你的row_indexes只有1个元素,否则有2个错误:

  1. row_indexes 中的索引在removeRow() 之后不再更新。
  2. 如果row_indexes是递增顺序,很容易引发OutOfBoundException。

【讨论】:

  • 它返回错误“运算符 - 未定义参数类型 int[], int.”,并且我没有使用很多循环,所以我不能真的建议做什么。 (也是凌晨 3:40):/
  • 基本上只是将循环从 end 反转到 0。你能告诉我该错误发生在哪一行吗?
  • @BachT 该行是这一行(在 removerows() 中):TableCA.model.removeRow(row_indexes[i]);
猜你喜欢
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 2011-07-21
相关资源
最近更新 更多