Problemas com Evento

O cógigo abaixo escreve algumas mensagem em um JTextArea, o problema é que quando coloco o método “mensagem” diretamente no construtor ele vai aparecendo progressivamente, mas quando coloco no evento do botão ele fica travado e so aparece depois que termina de escrever tudo. Como faria para que no evento ele também apareça progressivamente???

import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;

public class Comandos implements ActionListener {

  private static JDialog d;
  private static JTextArea texto;
  private static JButton b;

  private static void mensagem(JTextArea alvo) {
    for (int x=0; x<500; x++)
      alvo.setText( alvo.getText() + "Mensagem Mensagem Mensagem\n" );
  }

  public Comandos() {
    d = new JDialog();
    texto = new JTextArea();
    b = new JButton("ping");
    
    texto.setEditable(false);
    texto.setBounds(0, 0, 400, 400);
    
    b.setBounds(200, 510, 100, 40);
    b.addActionListener(this);

    Container c = d.getContentPane();
    c.setLayout(null);
    c.add(b);    
    c.add(texto);    

    d.setResizable(false);
    d.setSize(800, 600);
    d.setLocationRelativeTo(null);
    d.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    d.setVisible(true);
    mensagem(texto);
  }
  
  public void actionPerformed( ActionEvent e ) {
    mensagem(texto);    
  }
  
  public static void main(String args[]) {
    new Comandos();
  }
}

Use Threads.

Alguns exemplos:
http://www.javapractices.com/Topic153.cjp

Já tentei usar Thread e não consegui, é como se o evento parasse tudo.
Se vc acha que da pra fazer com threads tente fazer esse exemplo funcionar assim e poste aqui, por favor, já quebrei cabeça e não sei como resolver isso. :x