Estou com problema em uma thread

Estou aprendendo threads e estou com problema na hora que a thread passa pelo metodo que estipula o o tamanho das colunas.

private  void initColumnSizes(JTable table) {
        MyTableModel model = (MyTableModel) table.getModel();
        TableColumn column = null;
        Component comp = null;
        int headerWidth = 0;
        int cellWidth = 0;
        Object[] longValues = model.longValues;
        TableCellRenderer headerRenderer =
                table.getTableHeader().getDefaultRenderer();

        for (int i = 0; i < 2; i++) {
            column = table.getColumnModel().getColumn(i);

            
            comp = headerRenderer.getTableCellRendererComponent(
                    null, column.getHeaderValue(),
                    false, false, 0, 0);
           
            headerWidth = comp.getPreferredSize().width;


            comp = table.getDefaultRenderer(model.getColumnClass(i)).
                    getTableCellRendererComponent(
                    table, longValues[i],
                    false, false, 0, i);
            cellWidth = comp.getPreferredSize().width;


            column.setPreferredWidth(Math.max(headerWidth, cellWidth));
        }
    }

thread

private void atualizaTabela() {

        thread = new Thread() {

            @Override
            @SuppressWarnings("SleepWhileHoldingLock")
            public void run() {
                while (true) {
                    if (ece.isIsValida()) {
                        tableModel = new MyTableModel(nomeColuna, aplicacao.getTableAutores());
                        consultaTabela.setModel(tableModel);
                        setButtonsColumns(consultaTabela, consultaTabela.getColumnModel().getColumn(2), consultaTabela.getColumnModel().getColumn(3));
                        initColumnSizes(consultaTabela);//seu eu tirar funciona<<<<<<<<<
                        ece.setIsValida(false);
                    }
                    try {
                        sleep(300);
                    } catch (InterruptedException ex) {
                        JOptionPane.showMessageDialog(null, "aqui");
                        Logger.getLogger(InterfaceConsultaAutor.class.getName()).log(Level.SEVERE, null, ex);

                    }
                }

            }
        };
        thread.start();
    }

Esta thread simplismente atualiza os campos editados na tabela.

erro
Exception in thread “AWT-EventQueue-0” java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
at java.util.Vector.elementAt(Vector.java:427)

@Override //o erro aponta para este bloco do meu tableModel public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); }

Desde já agradeço!

Quantas colunas tem seu JTable no momento que a chamada do erro é feita?

No total 4 colunas só que as duas ultimas são botões e por isso que estipulo o tamanho so para as duas primeiras.

Tabela.

Meu table model


package Utilitario;

import javax.swing.table.AbstractTableModel;


public class MyTableModel extends AbstractTableModel {

    private String[] nomeColuna;
    private Object[][] dados;
    public final Object[] longValues = {"Márcio André Castelo Branco Zampiron    ", "Márcio André Castelo Branco Zampiron    "};

    public MyTableModel() {
    }

    public MyTableModel(String[] nomeColuna) {
        this.nomeColuna = nomeColuna;
    }

    public MyTableModel(String[] nomeColuna, Object[][] dados) {
        this.nomeColuna = nomeColuna;
        this.dados = dados;
    }

    public Object[][] getDados() {
        return dados;
    }

    public void setDados(Object[][] dados) {
        this.dados = dados;
    }

    public String[] getNomeColuna() {
        return nomeColuna;
    }

    public void setNomeColuna(String[] nomeColuna) {
        this.nomeColuna = nomeColuna;
    }

    @Override
    public String getColumnName(int column) {
        return nomeColuna[column];
    }

    public int getRowCount() {
        return dados.length;
    }

    public int getColumnCount() {
        return nomeColuna.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        return dados[rowIndex][columnIndex];
    }
@Override
    public Class getColumnClass(int c) {

        return getValueAt(0, c).getClass();
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        if (col < 2) {
            return false;
        } else {
            return true;
        }
    }
}

Você precisa alterar seu método getValueAt para retornar valor para as 4 colunas, nem que seja vazio. A JTable irá chamar esse método para cada coluna declarado no getColumnCount.

Vini eu mudei para percorrer todo o valor da minha variável longvalue[] mais não ta dando certo!
Obrigado