/ / JXTable java.lang.IndexOutOfBoundsException: Intervalo no válido: java, swing, jtable, indexoutofboundsexception, jxtable

JXTable java.lang.IndexOutOfBoundsException: rango no válido - java, swing, jtable, indexoutofboundsexception, jxtable

Tengo un problema durante la adición de filas a mi tablemodel para mi jxtable.

Se lanzará la siguiente excepción:

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)

Llamo al método que llena el modelo desde un hilo porque podría ser más de 10000 entradas y, de lo contrario, mi programa se congelará.

Lamento no poder pegar el código, pero esto es muy importante en mi empresa.

La excepción viene en esa línea si lo hago:

infomodel.addRow(new Object[{1,2,3,4,5,6,7,8});

¿Alguien tiene una idea de por qué ocurre esta excepción?

Con mejor

Respuestas

3 para la respuesta № 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 No suena como el EDT. No debe modificar el modelo que ya está colocado en una tabla en otro subproceso y luego el EDT. Ver el Concurrencia en el swing Tutorial para más información.

Usted podría utilizar por ejemplo SwingUtilities.invokeLater para programar la actualización del EDT. O, en caso de que tenga que rellenar nuevamente todo su modelo, podría ser más fácil crear un nuevo modelo. TableModel en el hilo de trabajo, y reemplace el modelo de una sola vez en la EDT


1 para la respuesta № 2

Tal vez agregue demasiadas columnas a una fila, más de las que hay en el modelo.