/** Uses a SwingWorker to perform a time-consuming (and utterly fake) task. */ public class LongTask { private int lengthOfTask; private int current = 0; private String statMessage; LongTask() { //Compute length of task... //In a real program, this would figure out //the number of bytes to read or whatever. lengthOfTask = 1000; } /** * Called from ProgressBarDemo to start the task. */ void go() { current = 0; final SwingWorker worker = new SwingWorker() { public Object construct() { return new ActualTask(); } }; } /** * Called from ProgressBarDemo to find out how much work needs * to be done. */ int getLengthOfTask() { return lengthOfTask; } /** * Called from ProgressBarDemo to find out how much has been done. */ int getCurrent() { return current; } void stop() { current = lengthOfTask; } /** * Called from ProgressBarDemo to find out if the task has completed. */ boolean done() { if (current >= lengthOfTask) return true; else return false; } String getMessage() { return statMessage; } /** * The actual long running task. This runs in a SwingWorker thread. */ class ActualTask { ActualTask () { //Fake a long task, //making a random amount of progress every second. while (current < lengthOfTask) { try { Thread.sleep(1000); //sleep for a second current += Math.random() * 100; //make some progress if (current > lengthOfTask) { current = lengthOfTask; } statMessage = "Completed " + current + " out of " + lengthOfTask + "."; } catch (InterruptedException e) {} } } } }