Bonjour à tous,

Comme cité dans un precedent topic, j'ai un traitement lourd et un affichage à effectuer.

On m'a conseillé le SwingWorker, je me suis donc rensigné et trouvé une faq dessus à l'adresse http://rom.developpez.com/java-swingworker/
J'ai lu avec attention les explications, mais j'i des difficulté à partager les 2 phases differentes, à savoir la lecture de fichiers et l'affichage de la progression.

Tout se melange dans ma lecture

Je vois els 2 bloc:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import java.awt.BorderLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.List;
 
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
 
public class SwingWorkerDemo extends JFrame {
 
    private JTextArea textArea;
    private JTextField textField;
    private JProgressBar progressBar;
 
    class MonSwingWorker extends SwingWorker<Integer, String> {
 
        public MonSwingWorker() {
            /* On ajoute un écouteur de barre de progression. */
            addPropertyChangeListener(new PropertyChangeListener() {
                public void propertyChange(PropertyChangeEvent evt) {
                    if("progress".equals(evt.getPropertyName())) {
                        progressBar.setValue((Integer) evt.getNewValue());
                    }
                }
            });
        }
 
        @Override
        public Integer doInBackground() {
            File userDir = new File(System.getProperty("user.dir"));
            return getNombreDeFichiers(userDir, 0, 100);
        }
 
        /* Compte le nombre de fichiers du répertoire utilisateur. */
        private int getNombreDeFichiers(File dir, double progressStart, double progressEnd) {
            File[] files = dir.listFiles();
            int nb = 0;
            if(files.length > 0) {
                /* Le calcul de l'avancement du traitement n'a que peu d'importance pour l'exemple. */
                double step = (progressEnd - progressStart) / files.length;
 
                for(File f : files) {
                    progressStart += step;
 
                    /* Transmet la nouvelle progression. */
                    setProgress((int) progressStart);
 
                    /* Ajout d'un temps d'attente pour observer les changements à l'échelle "humaine". */
                    try {
                        Thread.sleep(50);
                    } catch(InterruptedException e) {
                        e.printStackTrace();
                    }
 
                    if(f.isDirectory()) {
                        /* Publication du répertoire trouvé. */
                        publish("Exploration du répertoire " + f.getAbsolutePath() + "...");
                        nb += getNombreDeFichiers(f, progressStart, progressStart + step);
                    } else {
                        /* Publication du fichier trouvé. */
                        publish(f.getAbsolutePath());
                        nb++;
                    }
                }
            }
            return nb;
        }
 
        @Override
        protected void process(List<String> strings) {
            /* Affichage des publications reçues dans le textarea. */
            for(String s : strings)
                textArea.append(s + '\n');
        }
 
        @Override
        protected void done() {
            try {
                /* Le traitement est terminé. */
                setProgress(100);
                /* À la fin du traitement, affichage du nombre de fichiers parcourus dans le textfield. */
                textField.setText(String.valueOf(get()));
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
 
// FIN PREMEIR BLOC
 
    public SwingWorkerDemo() {
        /* Construction de l'interface graphique. */
        super("SwingWorkerDemo");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        textArea = new JTextArea(12, 40);
        textArea.setEnabled(false);
        textField = new JTextField(5);
        textField.setEnabled(false);
        progressBar = new JProgressBar();
        JPanel content = new JPanel(new BorderLayout());
        content.add(new JScrollPane(textArea,
		                            ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS,
				                    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED));
        JPanel south = new JPanel(new BorderLayout());
        south.add(progressBar);
        south.add(textField, BorderLayout.EAST);
        content.add(south, BorderLayout.SOUTH);
        setContentPane(content);
        pack();
        setLocation(100, 100);
        setVisible(true);
    }
 
    public static void main(String... args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                /* Démarrage de l'interface graphique et du SwingWorker. */
                SwingWorkerDemo demo = new SwingWorkerDemo();
                MonSwingWorker swingWorker = demo.new MonSwingWorker();
                swingWorker.execute();
            }
        });
    }
 
}
Mais je n'arrive pas à en faire 2 class differente. J'ai l'impression que l'un est imbriqué dans l'autre.

Quelqu'un peut-il m'aider?
D'avance merci
PS: pour simplifier, imaginons que mon traitement long est une simple boucle for (i=0; i<100000; i++)