/ / JXTable java.lang.IndexOutOfBoundsException: Nieprawidłowy zakres - java, swing, jtable, indexoutfboundsexception, jxtable

JXTable java.lang.IndexOutOfBoundsException: Nieprawidłowy zakres - java, swing, jtable, indexoutfboundsexception, jxtable

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 № 1
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 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.