Bonjour a tous,

je voudrai ouvrir une popup qui contient un gif. Cette popup servira a faire attendre l'utilisateur pendant un traitement de mon appli.

Pour ce faire, j'ai donc créer une JWindows contenant un JPanel qui contient un gif.

Ma class du JPanel
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
 
import java.awt.Color;
import java.awt.Graphics;
 
import javax.swing.ImageIcon;
import javax.swing.JPanel;
 
@SuppressWarnings("serial")
public class Gif extends JPanel  {
 
	   protected void paintComponent(Graphics g) {
	      // efface le contenu précédent :
	      g.setColor(Color.WHITE);
	      g.fillRect(0, 0, this.getWidth(), this.getHeight());
	      // dessine le gif :
	      ImageIcon icone = new ImageIcon(getClass().getResource("/resources/wait.gif"));
	      g.drawImage(icone.getImage(), 1, 1, 220, 19, this);
	   }
 
}
ma classe de la popup
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
import java.awt.BorderLayout;
 
import javax.swing.JLabel;
import javax.swing.JWindow;
 
 
@SuppressWarnings("serial")
public class Attente extends JWindow{
 
	public Attente(Gestion g){
		super(g);
		setLayout(new BorderLayout());
 
		JLabel lab=new JLabel("Traitement en cours");
		lab.setHorizontalAlignment(JLabel.CENTER);
		add(lab,BorderLayout.NORTH);
 
		add(new Gif());
 
		setSize(220,35);
		setVisible(true);
		this.setLocationRelativeTo(null);
 
	}
}
Donc, je lance ma popup lors d'un clic sur un bouton de mon IHM principale.
Le probleme est que comme le thread de mon IHM lance aussi mon traitement, je me retrouve avec une JWindow vide ....


Voici le code qui appele
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
 
public class EcouteurBouton implements ActionListener {
 
		public void actionPerformed(ActionEvent e) {
			if (e.getSource() == executer) {
				//lancement du compteur
				long start = System.currentTimeMillis();
 
				//lancement de la popup d'attente
				Attente att=new Attente(g);
				// lancement de la résolution suivant la methode choisie
				switch(choixMethode.getSelectedIndex()){
				case 0:
					//methode aléatoire
					Aleatoire al=new Aleatoire(taille); //traitement
					createVisu(al.resolution()); //traitement
					att.dispose(); //fermeture de la popup d'attente
					convertTime(System.currentTimeMillis() - start);
					break;
...
...
...

Donc, je pense que mon probleme vient d'un manque de thread. Alors, je voudrai savoir comment faire pour lancé ma popup dans un autre thread (il faut que la thread de l'IHM lance les traitements).

Je vous remercie d'avance pour votre aide

PS: si je lance la popup dans le main, elle fonctionne bien