La eliminación de la fila JTable cuando se aplica el clasificador causa la excepción IndexOutOfBoundsException

Tengo una JTable con filas de objetos personalizados, una columna de la cual es un componente de tiempo que cuenta hacia atrás. Cuando la cuenta regresiva llega a 0, la fila es eliminarse automáticamente.

También tengo una opción de filtro a través del cuadro de texto que el usuario puede escribir para filtrar las filas por sus datos.

Sin el clasificador aplicado al JTable, todo funciona correctamente (las filas se eliminan cuando el tiempo cuenta hasta 0) además del filtrado. La aplicación del clasificador me da una "java.lang.IndexOutOfBoundsException: índice no válido"

Mi modelo de mesa personalizado se ve así

public Object getValueAt(int rowIndex, int columnIndex) {

    CustomObject myObject = customObjects.get(rowIndex);
    if (columnIndex == MyFirstColumn) {
        return myObject.getData1();
    } else if (columnIndex == MySecondColumn) {
        return myObject.getData2();
    } else if (columnIndex == TimeRemainingColumn) {
        if (myObject.getDate() - System.currentTimeMillis() <= 0) {

            //If I comment this out I can filter but not remove rows
            removeRow(myObject); 

            return 0;
        }
        else{
            fireTableDataChanged();
            return myObject.getDate() - System.currentTimeMillis();
        }  
    }

    return DateFormat.getDateInstance().format(new Date(myObject.getDate()));
}


public void removeRow(CustomObject object) {
    int row = customObjects.indexOf(object);
    customObjects.remove(object);
    fireTableRowsDeleted(row, row);
}

Esto arroja esta excepción.

Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Invalid index
at javax.swing.DefaultRowSorter.convertRowIndexToModel(DefaultRowSorter.java:514)
at javax.swing.JTable.convertRowIndexToModel(JTable.java:2645)
at javax.swing.JTable.getValueAt(JTable.java:2720)
at javax.swing.JTable.prepareRenderer(JTable.java:5718)
at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:684)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:581)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5221)
....

Al ir a DefaultRowSorter.java se está golpeando esta excepción

public int convertRowIndexToModel(int index) {
    if (viewToModel == null) {
        if (index < 0 || index >= getModelWrapper().getRowCount()) {
            throw new IndexOutOfBoundsException("Invalid index");
        }
        return index;
    }
    return viewToModel[index].modelIndex;
}

Otro nivel, ¿por qué eliminar trabajos sin un clasificador (clasificador == nulo)?

public int convertRowIndexToModel(int viewRowIndex) {
    RowSorter sorter = getRowSorter();
    if (sorter != null) {
        return sorter.convertRowIndexToModel(viewRowIndex);
    }
    return viewRowIndex;
}

Depurar un poco firstRow y endRow son 0 en ese punto (¿deberían serlo?) Pero parece estar intentando ordenar / filtrar una lista vacía

Heres mi código de mesa

    myModel = new CustomObjectDataModel();

    myTable.setModel(myModel);
    mySorter = new TableRowSorter(myModel);

    myTable.setRowSorter(mySorter);
    myTable.setAutoCreateRowSorter(true);

He buscado y encontrado enlaces muertos para sugerir que esto es un error en Java pero no puedo confirmar.

Respuestas a la pregunta(1)

Su respuesta a la pregunta