Problema pausar loop

Galera, estou fazendo um trabalho da faculdade em que eu tenho que ordenar um vetor inserido pelo usuário. Essa parte já funciona belezinha, o que eu estou com dificuldade é que quando clicar no botão de ordenar, ele dê uma espécie de passo a passo dentro de um jtextarea, com um tempinho de diferença entre cada linha.

Aí que está meu problema, estou tentando colocar um Thread.sleep dentro do meu for, para que ele imprima uma linha e dê uma pequena pausa, mas ele não está pausando no momento certo e sim antes de iniciar a ordenação e já imprime tudo de uma vez.

Alguém poderia me dar uma luz de como eu poderia estar fazendo essa pausa de maneira correta?

Esse seria o código que estou trabalhando:

public void bubbleSort(int[] vetor){  
  
       int[] vetor_a_ordenar=vetor;  
       int[] vetor_inicial=vetor;            
       int cont=1;   
       String resultado = "";  
       String resultado2 = "";  
            
       for(int l=0;l<vetor_inicial.length;l++){  
             resultado2+=vetor[l]+" ";      
       }    
  
       for (int i = vetor_a_ordenar.length; i >= 1; i--) {    
             for (int j = 1; j < i; j++) {  
                 if (vetor_a_ordenar[j - 1] > vetor_a_ordenar[j]) {    
                    int aux = vetor_a_ordenar[j];    
                    vetor_a_ordenar[j] = vetor_a_ordenar[j - 1];    
                    vetor_a_ordenar[j - 1] = aux;   
  
                   for(int l=0;l<vetor_a_ordenar.length;l++){  
                       resultado+=vetor_a_ordenar[l]+" ";      
                   }     
                    Interface.jTextArea1.append(resultado+"\n");  // Gostaria de dar um pause após imprimir essa linha  
  
                   resultado="";  
                   cont++;  
                }  
            }   
        }           
    }  

Você precisa criar uma thread (argh). Um exemplo meia-boca segue abaixo.

package guj;

import java.awt.BorderLayout;

public class ExemploXXXSort extends JFrame {

    private JPanel contentPane;
    private JPanel panel;
    private JButton btnTestar;
    private JScrollPane scrollPane;
    private JTextArea textArea;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ExemploXXXSort frame = new ExemploXXXSort();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ExemploXXXSort() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        contentPane.add(getPanel(), BorderLayout.SOUTH);
        contentPane.add(getScrollPane(), BorderLayout.CENTER);
    }

    private JPanel getPanel() {
        if (panel == null) {
            panel = new JPanel();
            panel.add(getBtnTestar());
        }
        return panel;
    }

    private Thread thr;

    private JButton getBtnTestar() {
        if (btnTestar == null) {
            btnTestar = new JButton("Testar");
            btnTestar.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    thr = new Thread() {
                        public void run() {
                            for (int i = 1; i <= 10; ++i) {
                                final String texto = String.format("%03d\n", i);
                                SwingUtilities.invokeLater(new Runnable() {
                                    public void run() {
                                        getTextArea().append(texto);
                                    }
                                });
                                try {
                                    Thread.sleep(1000);
                                } catch (InterruptedException ex) {
                                }
                            }
                            SwingUtilities.invokeLater(new Runnable() {
                                public void run() {
                                    btnTestar.setEnabled(true);
                                }
                            });
                        }
                    };
                    btnTestar.setEnabled(false);
                    thr.start();
                }
            });
        }
        return btnTestar;
    }

    private JScrollPane getScrollPane() {
        if (scrollPane == null) {
            scrollPane = new JScrollPane();
            scrollPane.setViewportView(getTextArea());
        }
        return scrollPane;
    }

    private JTextArea getTextArea() {
        if (textArea == null) {
            textArea = new JTextArea();
        }
        return textArea;
    }
}

primeio, para que a thread funcione vc deve implementar o metodo run.

tente criar uma thread, implementar o metodo e colocar o seu for de resultado e o metodo de preencher a textArea dentro da thread
o textArea tem que estar dentro do seu for se eu nao me engano,
de um sleep depois de atribuir o resultado ao textArea

Aqui vai um exemplo de como funciona uma Thread

nesse caso aqui pra uma ProgressBar


      new Thread(){
            @Override
            public void run(){
                int i = 0;
                
                while(i<100){
                    pbProgresso.setValue(i);
                    i++;
                    try {
                        sleep(30);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(FrameSplash.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    
                }
                dispose();
                new FramePrincipal().setVisible(true);
            }
        }.start();

Se for em Swing, dê uma olhada em SwingWoker, que é uma espécie de thread em background com retorno para a Thread principal do Swing. Geralmente as barras de carregamento são feitas dessa forma.

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/interim.html