Mam problem podczas dodawania wierszy do mojego tablemodel dla mojego jxtable.
Zostanie zgłoszony następujący wyjątek:
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)
Wzywam metodę, która wypełnia model z wątku, ponieważ może to być więcej niż 10000 wpisów, w przeciwnym razie mój program zostanie zamrożony.
Przykro mi, że nie mogę wkleić kodu, ale jest to bardzo ważne w mojej firmie.
Wyjątkiem jest ta linia, jeśli ja to zrobię:
infomodel.addRow(new Object[{1,2,3,4,5,6,7,8});
Czy ktoś ma pomysł, dlaczego występuje ten wyjątek?
Z najlepszymi
Odpowiedzi:
3 dla odpowiedzi № 1Exception 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
nie brzmi jak EDT. Nie powinieneś modyfikować modelu, który jest już umieszczony na stole w innym wątku niż EDT. Zobacz Współbieżność w Swing samouczek, aby uzyskać więcej informacji.
Możesz użyć np. SwingUtilities.invokeLater
zaplanować aktualizację EDT. Lub na wypadek, gdyby trzeba ponownie wypełnić cały model, łatwiej będzie stworzyć nowy TableModel
w wątku roboczym i zamień model za jednym razem na EDT
1 dla odpowiedzi nr 2
Może dodasz zbyt wiele kolumn do wiersza - więcej niż w modelu.