Bonjour,
Je suis en train de programmer, sous Java / JFace, une application qui liste tous les fichiers
d'un répertoire passé en paramètre (la liste inclus aussi les sous-répertoires).
A la fin du traitement, un fenêtre s'ouvre et affiche la liste.
Jusque là, çà marche.
Sachant que le temps de traitement peut être long, j'ai prévu d'afficher une fenêtre de progression (ProgressMonitorDialog).
Le problème est que je perds le focus de la fenêtre de progression dès le début : ma trace m'indique en log que la prise en compte se fait correctement mais je n'ai aucune vision de cette fenêtre.
Fenêtre JFace
Action de ma ProgressMonitorDialog
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 WorkLessOperation wlo = null; try { wlo = new WorkLessOperation(true); new ProgressMonitorDialog(shell).run(true, true, wlo); } catch (InvocationTargetException e) { MessageDialog.openError(shell, "Erreur", e.getMessage()); } catch (InterruptedException e) { MessageDialog.openInformation(shell, "Annulée", e.getMessage()); display.dispose(); return; } final ArrayList<ElmFusion> liste = initListe(param); wlo.setFin(); wlo = null; // Affichage page ....
Merci à ceux qui prendront le temps de lire ce message et de réfléchir à mon problème.
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 public class WorkLessOperation implements IRunnableWithProgress { private static final int TOTAL_TIME = 10000; private static final int INCREMENT = 500; private boolean indeterminate; IProgressMonitor monitor; Timer timer; public WorkLessOperation(boolean indeterminate) { this.indeterminate = indeterminate; } public void run(final IProgressMonitor monit) throws InvocationTargetException, InterruptedException { monitor = monit; monitor.beginTask("Opération en cours", indeterminate ? IProgressMonitor.UNKNOWN : TOTAL_TIME); timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { System.out.println("DEBUT"); // Trace de debugging monitor.worked(INCREMENT); System.out.println("FIN"); // Trace de debugging } } , INCREMENT, INCREMENT); if (this.monitor.isCanceled()) { timer.cancel(); throw new InterruptedException("Opération annulée"); } } public void setFin() { timer.cancel(); monitor.done(); } }
Partager