Bonjour,

J'utilise la méthode SwingWorker, seulement si j'utilise Thread.sleep()

Cette méthode me met a jour mon splashscreen.

Voici mon code:
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
//SwingWorker
    class MonSwingWorker extends SwingWorker<Integer, String> {
    	Graphics g=splash.getGraphics();
		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
        /* Code a exécuter dans un Thread séparé (un long calcul par exemple) */
        public Integer doInBackground() {
        	try {
				return getNombreDeTraitement(0, 100);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				return 0;
			}
        }
 
 
        private Integer getNombreDeTraitement( double progressStart, double progressEnd) throws InterruptedException {
        	int nb = 0;
            model = new Model();
            System.out.println("test -1");
			Thread.sleep(1000);
            System.out.println("test 0");
    	}
 
 
		@Override
        /* Permet de récupérer les résultats partiels du traitement dans l'EDT publié dans la méthode publish */
        protected void process(List<String> strings) {
			for(String s : strings){
				splash.setChargement(s);
				System.out.println("test im");
				splash.update(g);
			}
        }
 
        @Override
        protected void done() {
            try {
                /* Le traitement est terminé. */
                setProgress(100);
                /* À la fin du traitement, affichage du programme. */
                fen_splash.setVisible(false);
                Fenetre fen = new Fenetre(model);
                fen.setVisible(true);
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
Voici mon splashscreen:
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
public class SplashScreen extends JPanel{
	BufferedImage image = null;
	private String chargement="";
	private Rectangle rectangle;
 
	public SplashScreen(Image image, Rectangle rectangle) {
		this.image = (BufferedImage) image;
		this.rectangle=rectangle;
	}
	/**
         * @param image
         * @uml.property  name="image"
         */
	public void setImage(BufferedImage image){
		this.image = image;
	}
 
	public Image getImage(BufferedImage image){
		return image;
	}	
 
	public void paint(Graphics g){
		if(Thread.currentThread().getState()!=Thread.State.WAITING){
			System.out.println(Thread.currentThread().getState());
			if(image.getColorModel().hasAlpha()){
				try{
					Robot robot = new Robot();
					BufferedImage fond = robot.createScreenCapture(rectangle);
					MediaTracker tracker = new MediaTracker(this);
					tracker.addImage(fond,0);
					tracker.waitForAll();
					g.drawImage(fond, 0,0,null);
				}catch(Exception e){e.printStackTrace();}
			}
			g.drawImage(image,0,0,null);
			//Font font = new Font("Courier", Font.BOLD, 14);
			//g.setFont(font);
			g.setColor(Color.WHITE);
			g.drawString(chargement, 20, 280); 
			System.out.println("Graphique revalider");
		}
	}
	public String getChargement() {
		return chargement;
	}
	public void setChargement(String chargement) {
		this.chargement = chargement;
	}
 
}
Et dans la console j'ai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
DEBUG - test -1
DEBUG - RUNNABLE
DEBUG - Graphique revalider
DEBUG - RUNNABLE
DEBUG - Graphique revalider
DEBUG - test 0
Pourquoi, si j'appelle Thread.Sleep(), cela me met a jour mon splashscreen

J'ai essayé de mettre une condition sur le thread, mais ça ne change rien
Merci de votre aide