Bonjour,
Je suis débutant en multi-threading, je programme en Java.
J'ai d'un coté 1 interface graphique, et d'autre coté un processus utilisateur. Dans l'interface graphique il y a 1 JProgressBar qui indique la progression du calcul utilisateur.
Je me suis fortement inspiré de l'exemple suivant :
http://rom.developpez.com/java-swingworker/
Pour faire simple, j'ai :
Alors mon problème est qu'il faut que sw ai collecté toutes les infos du fichier avant de continuer. Si je ne mets pas de notify et wait , la tâche est trop longue et les infos n'ont pas le temps d'etre calculées (informations.size() = 0)
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 class MaClasse extends JPanel { public void okActionPerformed(ActionEvent e) MonSwingWorker sw = new MonSwingWorker(); sw.execute(); wait(); // ici : le infos doivent etre collectées ! Info informations = sw .getInformations(); System.out.println(informations.size()); } public class MonSwingWorker() extends SwingWorker { public void scan(fichier) // scan d'un fichier ligne par ligne { for(int i=0 ; i<nbLigne ; i++) setProgress(i/nbLigne); } protected Void doInBackground(){ scan(fichier); notify(); } protected void done() {// appelée à la fin System.out.println("Done"); } } }
Quand je mets notify et wait, la tâche calcule bien les info ("Done" affiché), mais le processus principal ne reprend pas la main (pas d'affichage de "informations.size()...". J'ai essayé avec un notifyAll(), mais le problème reste le même.
Avez vous une idée d'ou cela peut provenir ? Ca ne doit pas etre hyper compliqué, mais ça m'échappe...
J'ai trouvé pas mal de topic sur ce type de problème, mais peu sont dans le même cas que moi (parcours du fichier en entier indispensable pour poursuivre l'EDT)
Merci d'avance pour votre aide.
Partager