Bonsoir à tous,

Je sais, ca fait 1000 fois qu'on le demande (et ca fait surement mon 10eme post sur SwingWorker), mais je suis totalmeent bloqué!!!

Je souhaire creer une methode qui me permette d'afficher un traitement long (donc une JProgress)

Certains d'entre vous m'ont conseillé de voir les SwingWorker, et apres une lecture, relecture, test de tuto, de demo, .... je n'y arrive toujours pas!!!

J'arrive tres simplement à mettre le tout dans une seul class et ca fonctionne tres bien, mais ce que je veux c'est creer une methode avec un parametre (le pourcentage) et apres appeler cette methode en lui passant la progression au fur et à mesure.

Voila ce que j'ai pour l'instant (inspiré de l'exemple fourni sur le site pour compter le nombre de fichiers):

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
public class ShowPercent extends JFrame
{
	private JProgressBar progressBar;
	public int percent = 0;
 
	class MonSwingWorker extends SwingWorker<Integer, String>
	{
		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
		public Integer doInBackground()
		{
			while (percent != 100)
			{
				setProgress(percent);
				System.out.println(percent);
				try
				{
// Pour etre certain qu'il passe par là, je mets 5 secondes d'attente
					Thread.sleep(5000);
				}
				catch (InterruptedException e)
				{
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			return 0;
		}
 
		@Override
		protected void done()
		{
				/* Le traitement est terminé. */
				System.out.println("done");
				setProgress(100);				
				setVisible(false);
		}
	}
 
	public ShowPercent()
	{
		/* Construction de l'interface graphique. */
		super("ShowPercent");
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		progressBar = new JProgressBar();
		JPanel content = new JPanel(new BorderLayout());
		JPanel south = new JPanel(new BorderLayout());
		south.add(progressBar);
		content.add(south, BorderLayout.SOUTH);
		setContentPane(content);
		pack();
		setLocation(100, 100);
		setVisible(true);
	}
 
	public int getPercent()
	{
		return percent;
	}
 
	public void setPercent(int percent)
	{
		this.percent = percent;
	}
 
	public static void main(String... args)
	{
		SwingUtilities.invokeLater(new Runnable()
		{
			public void run()
			{
				/* Démarrage de l'interface graphique et du SwingWorker. */
				ShowPercent showPercent = new ShowPercent();
				MonSwingWorker swingWorker = showPercent.new MonSwingWorker();
				swingWorker.execute();
			}
		});
	}
}
Mais je n'ai aucune idée (en tout cas j'y arrive pas) de comment l'utiliser via une autre class.

Ainsi par exemple, j'ai une autre class avec une methode a traitmeent long, je voudrais faire un:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
ShowPercent sp = new ShowPercent();
for (int i = 0; i< 100; i++)
{
sp.setPercent(i)
}
Mais je sais pas comment!!

Via un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
SwingUtilities.invokeLater(new Runnable()
		{
			public void run()
			{
				/* Démarrage de l'interface graphique et du SwingWorker. */
				ShowPercent showPercent = new ShowPercent();
				MonSwingWorker swingWorker = showPercent.new MonSwingWorker();
				swingWorker.execute();
			}
		});
Cela ne va pas car ma methode doit retourner des valeurs ci et là

D'avance je vous remercie