Why is my JTextArea not updating?

Macha picture Macha · Jul 21, 2011 · Viewed 10.7k times · Source

I have code as follows:

class SimplifiedClass extends JApplet {

    private JTextArea outputText;
    // Lots of methods
    public void DoEverything() {
        String output = "";
        for(int i = 0; i <= 10; i++) {
            output += TaskObject.someLongTask(i);
            outputText.setText(output);
        }
    }
}

However, instead of updating the text area after each iteration of the loop when setText is called, it appears to only update the text when all the runs of the task are done. Why does this happen, and how can I resolve it?

Answer

Mika T&#228;htinen picture Mika Tähtinen · Jul 21, 2011

You're probably using the Swing thread which is waiting for your code to execute before it can update the UI. Try using a separate thread for that loop.

public void DoEverything() {
  SwingUtilities.invokeLater(new Runnable() {
    public void run() {
      String output = "";
      for(int i = 0; i <= 10; i++) {
        output += TaskObject.someLongTask(i);
        outputText.setText(output);
      }
    }
  });
}