public class PiCalculator implements Task {
 private final int iterations;
 public PiCalculator(int iterations) {
  this.iterations = iterations;
 }

 protected double sum = 4.0;
 private TaskMonitor taskMonitor = null;
 private void cancel = false;

 public void run() {
  boolean negative = true;
  for (int i = 1; (i < iterations) && (!cancel); i++)
  {
   sum += (negative ? -4.0 : 4.0) / (i * 2.0 + 1.0);
   negative = !negative;
   if (taskMonitor != null)
    taskMonitor.setProgress(i * 100.0 / iterations);
  }
 }

 public void halt() {
  cancel = true;
 }

 public void setTaskMonitor(TaskMonitor taskMonitor) {
  this.taskMonitor = taskMonitor;
 }
}