Allora come ti dicevo il problema sta nel far si che l'aggiornamento della tabella avvenga fuori dal EDT e quindi in un'altro Thread.
Ti posto un esempio banale di come fare.
codice:
package it.muia.testricchefacce;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.concurrent.TimeUnit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

public class TestJTable extends JFrame {

    public TestJTable() {
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new BorderLayout());
        final DefaultTableModel model = new DefaultTableModel(new Object[][] { { 1, 1 }, { 2, 2 }, { 3, 3 } }, new Object[] {
                "ID", "VALUE" });
        final JTable jTable = new JTable(model);
        JScrollPane pane = new JScrollPane(jTable);
        this.add(pane, BorderLayout.CENTER);
        JButton updateButton = new JButton("UPDATE");
        updateButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                UpdateWork updateWork = new UpdateWork(model);
                updateWork.execute();
            }
        });
        this.add(updateButton, BorderLayout.SOUTH);
        this.pack();
        this.setVisible(true);
    }

    class UpdateWork extends SwingWorker<TableModel, Object[]> {
        private DefaultTableModel model;

        public UpdateWork(DefaultTableModel model) {
            this.model = model;
        }

        @Override
        protected TableModel doInBackground() throws Exception {
            for (int i = 0, value = 4; i < 10; i++, value++) {
                publish(new Object[] { value, value });// produco la nuova riga da aggiungere
                TimeUnit.SECONDS.sleep(2);// simulo un operazione pesante
            }
            return model;
        }

        @Override
        protected void process(List<Object[]> chunks) {
            for (Object[] row : chunks) {
                model.addRow(row);
            }
        }

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                TestJTable testJTable = new TestJTable();
            }
        });
    }
}