Newsgroup: it.comp.java
Titolo: Progress monitor che non termina il task

Ciao a tutti,
ho un problema con il ProgressMonitor che non riesco proprio a capire,
alla pressione del tasto Elabora
genero un Thread con le SwingWorker,  tutto funziona alla perfezione,
l'unico inconveniente che ho e'
nella finestra di Progress Monitor, se premo il tasto Cancel il Thread
non si stoppa e continua a lavora fino alla fine.
Ho provato a cercare in rete ed esempi vari, non riesco proprio a
capire dove sbaglio.
Grazie
Osvaldo
Il codice che utilizzo, con qualche taglietto :-)
import java.awt.Toolkit;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import javax.swing.*;
public class CustomerPrevailingForm extends javax.swing.JFrame
implements ActionListener, PropertyChangeListener {
    /** Creates new form CustomerPrevailingForm */
    public CustomerPrevailingForm() {
        initComponents();
    }
    private void initComponents() {
		// codice netbeans
		//
	 }
    private void ElaboraActionPerformed(java.awt.event.ActionEvent
evt) {
        // TODO add your handling code here:
        cPrevaling = new CustomerPrevailing();
        String testo = jTextArea1.getText();
        codcli = testo.split("\n");
        // Progress monitor
        progressMonitor = new
ProgressMonitor(CustomerPrevailingForm.this, "Elaborazione in
corso....", "", 0, codcli.length);
        progressMonitor.setProgress(0);
        task = new MyTask();
        task.addPropertyChangeListener(this);
        task.execute();
    }
    public void actionPerformed(ActionEvent e) {
    }
    private void EsciActionPerformed(java.awt.event.ActionEvent evt)
{
        // TODO add your handling code here:
        dispose();
    }
    public void propertyChange(PropertyChangeEvent evt) {
        if ("progress" == evt.getPropertyName() ) {
            int progress = (Integer) evt.getNewValue();
            progressMonitor.setProgress(progress);
            String message = String.format("Completed %d%%.\n",
progress);
 
progressMonitor.setNote(message);
            if (progressMonitor.isCanceled()) {
                progressMonitor.close();
                Toolkit.getDefaultToolkit().beep();
                task.cancel(true);
                Elabora.setEnabled(true);
                Visualizza.setEnabled(false);
                Esci.setEnabled(true);
            }
        }
    }
    class MyTask extends SwingWorker<Void, Void> {
        @Override
        public Void doInBackground() {
            Elabora.setEnabled(false);
            Visualizza.setEnabled(false);
            Esci.setEnabled(false);
            int progress = 0;
            for (int i=0; i< codcli.length; i++){
                if (codcli[i] != null){
                    cPrevaling.getValue(codcli[i]);
                    progress = i+1;
 
progressMonitor.setProgress(progress);
                }
            }
            return null;
        }
        @Override
        protected void done() {
            Elabora.setEnabled(true);
            Visualizza.setEnabled(true);
            Esci.setEnabled(true);
            progressMonitor.setProgress(0);
            progressMonitor.close();
        }
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CustomerPrevailingForm().setVisible(true);
            }
        });
    }
    String[] codcli;
    CustomerPrevailing cPrevaling;
    int res;
    int num_codcli;
    ProgressMonitor progressMonitor;
    MyTask task;
    // Variables declaration - do not modify
    private javax.swing.JButton Elabora;
    private javax.swing.JButton Esci;
    private javax.swing.JButton Visualizza;
}

 non si stoppa e continua a lavora fino alla fine.
il progress monitor ha un metodo chiamato iscanceled o qualcosa del
genere.
Devi chiamarlo periodicamente e gestire la cancellazione.