import java.awt.EventQueue;
import java.awt.event.*;

import javax.swing.*;

/**
 * @author Remi Forax
 *
 */
public class ThreadExample {

  public static void main(String[] args) {
    JFrame frame=new JFrame("DispatchThreadExample");
    
    final JProgressBar progressBar=new JProgressBar(0,100);
    
    final JButton button=new JButton("start");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        button.setEnabled(false);
        new Thread() {
          public void run() {
            for(int i=1;i<=100;i++) {
              try {
                Thread.sleep(100);
              } catch (InterruptedException e) {
              }
              
              final int percent=i;
              EventQueue.invokeLater(new Runnable() {
                public void run() {
                  progressBar.setValue(percent);    
                }
              });
            }
            
            try {
              EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                  button.setEnabled(true);
                }
              });
            } catch (Exception e) { //mal
            }
          }
        }.start();
      }
    });
    
    JPanel panel=new JPanel();
    panel.add(progressBar);
    panel.add(button);
    
    frame.setContentPane(panel);
    frame.setSize(400,300);
    frame.show();
  }
}
