¿Por qué debo llamar a getRowSorter (). ModelStructureChanged () antes de fireTableRowsInserted ()

Tengo una tabla que extiende AbstractTableModel. Cuando llegan los datos, elimino las filas y las vuelvo a crear con datos nuevos. Lo que no entiendo es por qué tengo que llamar a lo siguiente:

getRowSorter().modelStructureChanged();

antes de llamar

fireTableRowsInserted();

Si no hago esto, fireTableRowsInserted () me arroja la siguiente excepción:

Exception in thread "AWT-EventQueue-1" java.lang.ArrayIndexOutOfBoundsException: 1
    at javax.swing.DefaultRowSorter.setModelToViewFromViewToModel(DefaultRowSorter.java:717)
    at javax.swing.DefaultRowSorter.rowsInserted0(DefaultRowSorter.java:1046)
    at javax.swing.DefaultRowSorter.rowsInserted(DefaultRowSorter.java:851)
    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 javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
    at javax.swing.table.AbstractTableModel.fireTableRowsInserted(AbstractTableModel.java:215)
    at ems.ui.components.BoundTable$BoundTableModel.addRow(BoundTable.java:189)
    at ems.ui.components.BoundTable.loadData(BoundTable.java:315)
    at ems.ui.components.BoundTable.modelChanged(BoundTable.java:333)
    at ems.model.BaseDataModel.notifyPropertyChange(BaseDataModel.java:541)
    at ems.model.BaseDataModel.listLoadedFully(BaseDataModel.java:456)
    at 
    at ems.network.HTTPProtobufPoller$2.run(HTTPProtobufPoller.java:107)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Respuesta 1

¿Cuál es la diferencia (ventajas / desventajas de ambos) entre OracleCachedRowSet y RowSet en Java?

Estoy en una Mac, ejecutando una instancia MAMP de MySQL. Estoy tratando de usar un controlador jdbc para conectar mi código java a una base de datos llamada 'prueba', trabajando con una tabla llamada 'cliente'. Sigo recibiendo un error: ...

Estoy en el proceso de desarrollar una aplicación web; donde en el backend de administración necesito tener la funcionalidad para hacer trabajos de impresión automáticos para diferentes procesos que se ejecutan y generan un pdf (etiquetas, ...

Quiero completar los campos de destinatario y remitente en este sitio web http://sms.orange.pl/ usando un script Java marcado. He buscado en Google, y eso fue lo que se me ocurrió: $ javascript: document ...