Use SwingWorker to perform background tasks : SwingWorker « Swing « Java Tutorial






import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.SwingWorker;

public class Main extends JFrame {

  public Main() {
    this.setLayout(new FlowLayout());
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JButton processButton = new JButton("Start");
    JButton helloButton = new JButton("Hello");

    processButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent event) {
        MyTask process = new MyTask();
        try {
          process.execute();
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });

    helloButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JOptionPane.showMessageDialog(null, "Hello There");
      }
    });
    this.getContentPane().add(processButton);
    this.getContentPane().add(helloButton);

    this.pack();
    setVisible(true);
  }

  public static void main(String[] args) {
    new Main();
  }

}

class MyTask extends SwingWorker {
  protected Object doInBackground() throws Exception {
    Integer result = new Integer(0);
    for (int i = 0; i < 10; i++) {
      result += i * 10;
      try {
        Thread.sleep(5000);
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
    return result;
  }
}








14.125.SwingWorker
14.125.1.Progress Monitor and Swingworker
14.125.2.extends generic SwingWorker
14.125.3.Use SwingWorker to perform background tasks
14.125.4.SwingWorker in Java 6