JXTable java.lang.IndexOutOfBoundsException:无效范围

时间:2012-09-26 11:26:21

标签: java swing jtable indexoutofboundsexception jxtable

在为我的jxtable的tablemodel添加行时遇到问题。

将抛出以下异常:

Exception in thread "Thread-9" java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.checkAgainstModel(DefaultRowSorter.java:904)
at javax.swing.DefaultRowSorter.rowsInserted(DefaultRowSorter.java:844)
at javax.swing.JTable.notifySorter(JTable.java:4258)
at javax.swing.JTable.sortedTableChanged(JTable.java:4106)
at javax.swing.JTable.tableChanged(JTable.java:4383)
at org.jdesktop.swingx.JXTable.tableChanged(JXTable.java:1524)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
at javax.swing.table.AbstractTableModel.fireTableRowsInserted(AbstractTableModel.java:215)
at javax.swing.table.DefaultTableModel.insertRow(DefaultTableModel.java:359)
at javax.swing.table.DefaultTableModel.addRow(DefaultTableModel.java:333)
at javax.swing.table.DefaultTableModel.addRow(DefaultTableModel.java:344)
at de.mudisar.MainWindow.addRow(MainWindow.java:2358)
at de.mudisar.dataloader.SelectionDataLoader.run(SelectionDataLoader.java:46)

我调用从线程填充模型的方法,因为这可能超过10000个条目,否则我的程序将被冻结。

很抱歉我无法粘贴代码,但这对我公司来说非常关键。

如果我这样做,该行就会出现异常:

infomodel.addRow(new Object[{1,2,3,4,5,6,7,8});

有人知道为什么会发生这种异常吗?

最好的

2 个答案:

答案 0 :(得分:3)

Exception in thread "Thread-9" java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.checkAgainstModel(DefaultRowSorter.java:904)
at javax.swing.DefaultRowSorter.rowsInserted(DefaultRowSorter.java:844)
at javax.swing.JTable.notifySorter(JTable.java:4258)

Thread-9听起来不像EDT。您不应该修改已放置在另一个线程上的表上的模型,然后修改EDT。 有关详细信息,请参阅Concurrency in Swing教程。

您可以使用例如SwingUtilities.invokeLater安排EDT的更新。或者,如果您必须重新填充整个模型,可能更容易在工作线程上创建新的TableModel,并在EDT上一次性替换模型

答案 1 :(得分:1)

也许你在一行中添加了太多的列 - 比模型中的更多。