Bonsoir � tous
Je me permets de solliciter votre aide !
Dans le code suivant :
... on ex�cute chaque �l�ment de la liste todo (cela se fait dans une autre partie du code) dans un nouveau thread. De plus, chacun de ces threads lance un ExecutorService qui lui m�me va lancer pleins de threads diff�rents. On ne passe pas � l'�l�ment suivant de la liste todo tant que l'ExecutorService n'a pas termin� la t�che. Et juste avant de passer � l'�l�ment suivant de la liste todo le new Runnable que l'on voit ci-dessus est lanc� dans le thread de l'�l�ment en cours de la liste todo. (Vous suivez
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 final StatusDialog dg = StatusDialog.getStatusDialog(this, "", false); final Iterator<AbstractDataProvider> itr = todo.iterator(); AbstractDataProvider prov; final RefBoolean finished = new RefBoolean(); while (itr.hasNext()) { finished.setVal(false); prov = itr.next(); dg.setTitle(prov.toString()); prov.execute(prov.toString(), source, target, this.multithreadCheckBox.isSelected(), this.logTextArea, new Runnable() { @Override public void run() { finished.setVal(true); } }, dg); while (!finished.getVal()) Thread.sleep(1000); i = providerComboBox.getSelectedIndex(); this.providerComboBox.removeAll(); for (AbstractDataProvider provider : DataProviderFactory .getProviders()) { this.providerComboBox.addItem(provider); } providerComboBox.setSelectedIndex(i); } dg.dispose();)
De plus, la variable dg est une bo�te de dialogue cens�e afficher la progression des ExecutorService (le pourcentage est mis � jour chaque fois qu'un Thread d'un ExecutorService se termine), et elle contient aussi un bouton mettant fin � l'ExecutorService.
Le probl�me, c'est que toutes les t�ches demand�es s'effectuent correctement mais la bo�te de dialogue reste d�sesp�r�ment vide jusqu'� ce que toutes les t�ches aient �t� ex�cut�es...
Voici encore les deux fonctions de la classe StatusDialog permettant respectivement de mettre � jour la barre de progression et de mettre fin � l'ExecutorService en cours en cliquant sur le bouton :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12 public void setProgress(final int value) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { StatusDialog.this.pb.setValue(value); StatusDialog.this.pb.invalidate(); } }); }Quelqu'un aurait-il une solution � mon probl�me ? Merci d'avance
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9 public void listenExecutor(final ExecutorService pool) { cancel.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { canceled = true; pool.shutdownNow(); } }); }![]()
Partager