Questa e' la classe:

codice:
/*
 * DeKProgressBar.java
 *
 * Created on 10 aprile 2005, 18.38
 */

package dek;

import static dek.DeKTaskObserver.Bounds;

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.Timer;

/**
 * @version 1.1
 * @author DeK
 */

public class DeKProgressBar extends JProgressBar {
    
    private DeKTaskObserver monitorDPB;
    private Timer updater;
    private int milli;

    private final Azione setProgress = new Azione();
    public static final int DEFAULT_TIME = 500; // Timer di default a mezzo secondo
    
    public DeKProgressBar() {
        this(DEFAULT_TIME);
    }
    
    public DeKProgressBar(int milliseconds) {
        this(milliseconds, null);
    }
    
    public DeKProgressBar(DeKTaskObserver dto) {
        this(DEFAULT_TIME, dto);
    }
    
    public DeKProgressBar(int milliseconds, DeKTaskObserver task) {
        super();
        setTaskObserver(task);
        setMillis(milliseconds);
    }
    
    private void createUpdater() {
        updater = new UpdatePB();
    }
    
    public void setTaskObserver(DeKTaskObserver dto) {
        monitorDPB = dto;
        createUpdater();
    }
    
    public DeKTaskObserver getTaskObserver() {
        return monitorDPB;
    }
    
    public void setMillis(int t) {
        milli = t;
    }
    
    public int getMillis() {
        return milli;
    }
    
    private void start() {
        setMinimum(getTaskObserver().taskStatus(Bounds.MIN));
        setMaximum(getTaskObserver().taskStatus(Bounds.MAX));
        run();
        updater.start();
    }
    
    private void stop() {
        updater.stop();
        run();
    }
    
    public boolean setRunning(boolean flag) {
        if (updater==null)
            return false;
        assert (monitorDPB != null);
        if (flag && !updater.isRunning())
            start();
        else if (!flag && updater.isRunning())
            stop();
        else return false;
        return true;
    }
    
    private void run() {
        SwingUtilities.invokeLater(setProgress);
    }
    
    // Timer
    private final class UpdatePB extends Timer {
        
        public UpdatePB() {
            super(DeKProgressBar.this.getMillis(), setProgress);
        }
    }
    
    // Callback Action
    private class Azione extends AbstractAction implements Runnable {
        
        public void run() {
            setValue(getTaskObserver().taskStatus());
        }
        
        public void actionPerformed(ActionEvent e) {
            run();
        }
    }
    
}
La classe UpdatePB forse non serve piu'. Inizialmente conteneva... praticamente tutto il codice!!!