Как отобразить вывод консоли в Java JTextarea один за другим в цикле, когда запускается действие кнопки

У меня возникла проблема с тем, как отобразить вывод консоли в Jtextarea один за другим. Я успешно перенаправил вывод системной консоли в JTextarea. Но проблема в том, что в реальной системной консоли выходные данные отображаются один за другим (я установил функцию Thread.sleep (), поэтому результат будет отображаться, скажем, каждые пол секунды). Но в JTextarea вывод будет отображаться только один раз после завершения цикла, он не будет отображаться один за другим, как в реальной системной консоли.

цикл запускается кнопкой GUI. пожалуйста, посмотрите пример кода ниже. это всего лишь часть кода.

// 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();
                }
            }

        }
}

как вы можете видеть, я использую System.out.println (i) в цикле, потому что я перенаправил вывод системной консоли в JTextarea, поэтому вывод находится в JTextarea.

проблема, как я упоминал выше, в реальной консоли выводит вывод по одному каждые 500 миллисекунд. Но в перенаправленной Jtextarea результат показывает один раз, когда весь цикл завершен. Я не знаю, почему это так. Я хочу, чтобы вывод отображался по одному также в перенаправленной JTextarea.

Может кто-нибудь мне помочь. Большое спасибо!