0

我在为我的 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});

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

用最好的

4

2 回答 2

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。有关更多信息,请参阅Swing 中的并发教程。

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

于 2012-09-26T12:50:10.000 回答
1

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

于 2012-09-26T11:31:07.853 回答