Problemas com evento

O código abaixo server para utilizar o ping do próprio sistema operacional e escreve-lo em JTextArea. Ele deve escrever de maneira que o tempo de espera do ping seja perceptivel.
O método ping está totalmente correto, tanto que se eu coloca-lo diretamente no construtor ele funciona corretamente, mas se eu coloca-lo em algum evento não funciona da maneira esperada.
Tentem executar esse código com o metodo “ping” no construtor e depois no evento para vocês perceberem bem o que estou tentando explicar e me mandem uma solução por favor. Só sei que tenho que alterar alguma coisa no evento, mas o que?

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 ping(String destino, JTextArea alvo, int quant) {
    try {
      Process p = Runtime.getRuntime().exec("ping " + destino ); 
			BufferedReader out = new BufferedReader(new InputStreamReader(p.getInputStream())); 
			String s = null;
		  do {
		    s = null;
		    s = out.readLine(); 
		    if ( (s != null) && (s.length() > 0) ) alvo.setText(alvo.getText() + s + "\n");
		  } while (s != null);
		} catch(IOException io){} 
  }

  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);
    //ping("10.203.1.1", texto, 4);
  }
  
  public void actionPerformed( ActionEvent e ) {
    ping("10.203.1.1", texto, 4);    
  }
  
  public static void main(String args[]) {
    new Comandos();
  }
}

cara, rodei o codigo exatamente do jeito que esta ai, e funcionou perfeitamente, de forma que eu nem precisei descomentar o trecho que voce colocou no construtor…
apareceu a janela, cliquei em ping, apareceu o retorno o do ping…tudo certo:

o mesmo aconteceu quando testei colocando direto no construtor…

se tiver mais algum problema posta ai, mas esse codigo ai ta todo certo…

ps.: coloca EXIT_ON_CLOSE na operacao de fechamento da janela, senao a aplicacao continua rodando…

 public void actionPerformed( ActionEvent e ) {
	if (e.getSource().equals(b))
		ping("10.203.1.1", texto, 4);   
  }

Das duas maneiras funciona, mas de maneira diferente.
Quando eu coloco só no construtor o resultado aparece progressivamente, mas quando é no evento do botão o JTextArea fica travado e só depois que tudo termina o texto aparece de uma so vez e eu não quero que isso aconteça. Tem alguma solução?

Esperimenta olhar com o método só no construtor e depois testa com o método só no evento e vc vai percever a diferença de que estou falando.

Se eu não tiver sido claro é só falar que eu elaboro outra pergunta. valeu.