como exibir a saída do console em java JTextarea um por um em um loop quando a ação do botão é acionada

Eu tenho um problema com a forma de exibir a saída do console no Jtextarea um ser um. Eu redirecionei com êxito a saída do console do sistema para o JTextarea. Mas o problema é que no console do sistema real, a saída aparece uma a uma (eu defino uma função Thread.sleep (), então o resultado aparecerá, digamos, a cada meio segundo). Mas no JTextarea a saída será mostrada apenas uma vez quando o loop terminar, ele não mostrará um por um como o console do sistema real.

o loop é acionado por um botão GUI. por favor, veja o código de amostra abaixo. isso é apenas parte do código.

// Create a button.
but.setVerticalTextPosition(AbstractButton.CENTER);
but.setHorizontalTextPosition(AbstractButton.LEADING);
but.setActionCommand("publish");
but.addActionListener(this);

// Button action
public void actionPerformed(ActionEvent e) {
final JButton source = (JButton)e.getSource();
        if(source.equals(but)){
            for( int i = 0 ; i < 5 ; i++ ) {

                System.out.println( i );

                        // regular textarea output
                //JTextarea.append(Integer.toString(i));
                try {
                    Thread.sleep( 500 );
                } catch (InterruptedException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }

        }
}

Como você pode ver, eu uso System.out.println (i) no loop, porque eu redirecionei a saída do console do sistema para JTextarea, então a saída está em JTextarea.

O problema é, como eu mencionei acima, no console real, a saída mostra um por um a cada 500 milissegundos. Mas no Jtextarea redirecionado, o resultado mostra uma vez quando todo o loop é feito. Eu não sei porque é assim. Eu quero a saída para mostrar um por um, bem como JTextarea redirecionado.

Alguém pode me ajudar por favor. Muito Obrigado!