我有延伸AbstractTableModel上的表模型和被用于该模型的数据库。某些进程正在向该模型动态添加行,并在每次将行添加到数据库时触发fireTableRowsInserted(lastRow,lastRow)。一切工作正常,除非我为该模型添加分拣机。在应用分类器之后,fireTableRowsInserted(lastRow,lastRow)抛出java.lang.ArrayIndexOutOfBoundsException,其中行仍然添加到模型中并显示在GUI1上。爪哇fireTableRowsInserted(INT,INT)与RowSorter的
所有进程/线程与Swing组件连通的调度上EDT。以下是该例外的完整堆栈跟踪。
java.lang.ArrayIndexOutOfBoundsException: 281
at javax.swing.DefaultRowSorter.setModelToViewFromViewToModel(DefaultRowSorter.java:734)
at javax.swing.DefaultRowSorter.rowsInserted0(DefaultRowSorter.java:1063)
at javax.swing.DefaultRowSorter.rowsInserted(DefaultRowSorter.java:868)
at javax.swing.JTable.notifySorter(JTable.java:4272)
at javax.swing.JTable.sortedTableChanged(JTable.java:4120)
at javax.swing.JTable.tableChanged(JTable.java:4397)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:296)
at javax.swing.table.AbstractTableModel.fireTableRowsInserted(AbstractTableModel.java:231)
at View.AllData.CenterSection.DataModel$1.run(DataModel.java:143)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
这可能是该例外的可能原因?以及潜在的解决方案。现在大约7-8小时,我正在试图解决这个问题,但没有发现任何工作。任何帮助将为我感激。
在此先感谢。
数据我需要显示是非常巨大的,所以,fireTableDataChanged()对我来说是非常昂贵的。不能这样做。