在为我的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});
有人知道为什么会发生这种异常吗?
最好的
答案 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)
也许你在一行中添加了太多的列 - 比模型中的更多。