Salve,

premetto che uso JSE 5 che non aveva inclusa SwingWorker, che ho scaricato dal sito del progetto quindi non so se sia uguale al 100% (ma penso di si) con JSE 6. Detto ciò:

Allora sto facendo un operazione di test lanciata con SwingWorker. Tutto ok nessun problema mi parte in background l'operazione e siamo tutti felici e contenti.

Ora,volevo implementare nel JForm che lancia questa applicazione, i classici pulsanti STOP e CONTINUE. Scartabellando per internet l'unica soluzione che sono riuscito ad implementare è quella di inserire nella mia classe una variabile di stop e settare a true/false quella attraverso i pulsanti STOP e CONTINUE. Questo è il risultato:

codice:
public class TestTask extends SwingWorker<Void, Void> {

    private boolean stopped = false;

    @Override
    protected Void doInBackground() throws Exception {
        Random random = new Random();
        int progress = 0;
        //Initialize progress property.
        setProgress(0);
        //Sleep for at least one second to simulate "startup".
        try {
            Thread.sleep(1000 + random.nextInt(2000));
        } catch (InterruptedException ignore) {
        }
        while (progress < 100 && !isCancelled()) {

            if (!stopped) { //<------- CONTROLLO CHE NON SIA STATO MESSO IN PAUSA

                //Sleep for up to one second.
                try {
                    Thread.sleep(random.nextInt(1000));
                } catch (InterruptedException ignore) {
                }
                //Make random progress.
                progress += random.nextInt(10);
                setProgress(Math.min(progress, 100));
            }
        }
        return null;
    }
    
    public void pause(){
        stopped=true;
    }
    
    public void restart(){
        stopped=false;
    }
}
dove i pulsanti STOP e CONTINUE nella jFrame vanno a richiamare le funzioni pause() e restart() di TestTask

Mi chiedevo: ma da 1 a 10 fa schifo 100 questa soluzione, oppure è effettivamente un modo affermato di procedere? Avevo pensato ad usare wait() e notify(), solo che non riesco a gestirli perchè se chiamo wait cmq mi blocca tutto quanto (thread principale) e quindi l'applicazione non risponde piu.

Grazie per gli eventuali consigli