Bonsoir,

Je suis actuellement entrain de créer des statistiques dont le format de sorti est le PDF. Donc je souhaite passer la création dans un thread.

Cela fonctionne niquel.

Alors la seconde étape est de montrer à l'utilisateur l'état d'avancement de la création de rapport. Alors j'ai créer une class MaProgressBar.


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
package outils;
 
import javax.swing.JProgressBar;
import javax.swing.JSlider;
import javax.swing.SwingWorker;
 
public class MaProgressBar extends JProgressBar{
 
	private Move move = null;
	private JSlider sb = null ;
 
	public MaProgressBar(){
		super(0,100);
		sb =  new JSlider(JSlider.HORIZONTAL, 0, 100, 60);
		sb.setValue(0);
		sb.setPaintTicks(true);
		sb.setMajorTickSpacing(20);
		sb.setMinorTickSpacing(5);
		this.setModel(sb.getModel());
		this.setValue(0);
	}
 
	public void setVisible(boolean b) {
        if (b) {
            if (move == null) {
                move = new Move();
                move.start();
            }
        } else {
            if (move != null) {
                move.end();
                move = null;
            }
        }
        super.setVisible(b);
    }
 
	public JProgressBar getProgress(){
		return this;
	}
 
	private class Move extends Thread {
        private boolean end = false;
 
        public void run() {
            try {
                while (!end) {
                    sleep(10);
                    if (getProgress().getValue() < getProgress().getMaximum())
                        getProgress().setValue(getProgress().getValue() + 1);
                    else {
                        getProgress().setValue(0);
                    }
                    repaint();
                }
            } catch (InterruptedException e) {
                end();
            }
        }
        public void end() {
            this.end = true;
        }
	}
}

Ensuite lors du clique sur un bouton je lance la création de rapport et j'initialise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
MaProgressBar.setVisible(true);
Puis à la fin de la création du rapport j'initialise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
MaProgressBar.setVisible(false);
Voici le thread lancé lors du clique


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
btnLancerStat.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent aevt){
				new Thread() {
	                                 public void run() {
			                             MaProgressBar.setVisible(true);
                                                     fonctionCreationRapport();
    		                                     MaProgressBar.setVisible(false);
	                                 }
	                        }.start();
 
		});

Et cela ne m'affiche pas la MaProgressBar

Si quelqu'un à une idée elle est la bienvenue


Merci d'avance,

Cordialement,