import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import org.jdesktop.swingworker.*;

public class MySwingWorker extends SwingWorker<String,Void> {
  private JButton start_button;
  private JProgressBar bar;
  private JButton get_button;

  public MySwingWorker(JButton x, JProgressBar y, JButton z) {
    super();
    start_button = x; bar = y; get_button = z;
  }

  // Executed by the ED thread
  public void done() {
    start_button.setEnabled(true);
    get_button.setEnabled(true);
    bar.setValue(0);
  }

  // Executed by a background thread
  public String doInBackground() {
    for (int i=0; i<100; i++) {
      SwingUtilities.invokeLater(new ProgressUpdater(bar,i));
      try { Thread.sleep(50); } catch (InterruptedException e) {}
    }
    return new String("done");
  }

  private class ProgressUpdater implements Runnable {
    private JProgressBar bar;
    private int value;
  
    public ProgressUpdater(JProgressBar x, int y) {
      bar = x; value = y;
    }
  
    public void run() {
      bar.setValue(value);
    }
  }
}
