salut,
j'utilise la tres belle classe de Romain Guy InfiniteProgressPanel pour faire attendre les utilisateurs lorsque les temps de traitement sont long
http://www.jroller.com/page/gfx/2005...style_in_swing
mais je rencontre un petit soucis: les actions que je lance peuvent etre tres longues ou tres courtes (je n'ai aucun moyen de savoir par avance).
Le probleme est que lorsqu'elles sont tres courtes (qq milisecondes) cela plante completement l'appli !
l'arret de l'animation parait bien applée, le glasspane n'est plus visible , par contre impossible de reprendre la main sur l'interface....
pour illustrer le probleme je joins le code suivant:
si le thread dort 1000 ms aucun pb , changez le a 1 ou 0 ms et cela ne fonctionne plus (parfois dès la premiere fois , d'autre fois au 2 ou 3 eme appel)
si quelqu'un comprend pourquoiRomain peut etre ?
merci
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 public class Test extends JFrame implements ActionListener { protected InfiniteProgressPanel glassPane; public static void main(String[] args) { Test test = new Test(); test.setVisible(true); } public Test() { setSize(200,400); JButton bt = new JButton("go"); bt.addActionListener(this); getContentPane().add(bt); this.glassPane = new InfiniteProgressPanel(); setGlassPane(glassPane); } public void actionPerformed(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { public void run() { glassPane.start(); Thread performer = new Thread(new Runnable() { public void run() { loading2(); } }, "Performer"); performer.start(); } }); } private void loading2(){ try { Thread.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } glassPane.stop(); System.out.println("stop"); } }
Partager