/ / JXTable java.lang.IndexOutOfBoundsException: intervallo non valido - java, swing, jtable, indexoutofboundsexception, jxtable

JXTable java.lang.IndexOutOfBoundsException: intervallo non valido - java, swing, jtable, indexoutofboundsexception, jxtable

Ho un problema durante l'aggiunta di righe al mio tablemodel per il mio jxtable.

La seguente eccezione verrà generata:

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)

Chiamo il metodo che riempie il modello da un thread perché potrebbe essere più di 10000 voci e in caso contrario il mio programma verrà congelato.

Mi dispiace di non poter incollare il codice ma questo è molto critico nella mia azienda.

L'eccezione arriva a quella linea se faccio:

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

Qualcuno ha un'idea del perché questa eccezione si verifica?

Con i migliori

risposte:

3 per risposta № 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 non suona come l'EDT. Non dovresti modificare il modello che è già collocato su un tavolo su un altro filo dell'EDT. Vedere il Concorrenza in swing tutorial per ulteriori informazioni.

Potresti usare per es. SwingUtilities.invokeLater per pianificare l'aggiornamento dell'EDT. O nel caso in cui devi ri-popolare l'intero modello, potrebbe essere più facile crearne uno nuovo TableModel sul thread di lavoro e sostituire il modello in una volta sull'EDT


1 per risposta № 2

Forse aggiungi troppe colonne a una riga, più di quante ce ne siano nel modello.