Bonjour à tous,
j'ai un projet dans lequel un clic sur un bouton entraine un traitement assez long. Avant ce traitement, je mets une JProgressBar en indeterminated. Le problème est que rien ne se passe, et le bouton reste "freezé".
J'ai lu sur le net que c'est un problème courant, et qu'il faut jouer avec les threads pour pallier ce problème. J'ai essayé différents exemples de codes, mais aucun ne marche chez moi.
Pour reproduire le probleme simplement, j'ai recréé un mini projet avec juste le bouton et la progressbar. Le traitement est simulé par un "wait" de 4 secondes.
Voici mon code :
C'est le genre d'exemple que j'ai trouvé sur le net, mais ca ne fonctionne pas chez moi, la barre reste vide, et ne s'active qu'après les 4 secondes d'attente.
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 import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Main extends JFrame implements ActionListener{ private JButton bouton; private JProgressBar barre; public Main() { this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.bouton = new JButton("Click me"); this.add(this.bouton,BorderLayout.PAGE_START); this.barre = new JProgressBar(); this.add(barre,BorderLayout.CENTER); this.setPreferredSize(new Dimension(200,150)); this.pack(); this.bouton.addActionListener(this); this.setVisible(true); } public void actionPerformed(ActionEvent evt) { System.out.println("clique"); new Runnable() { public void run() { SwingUtilities.invokeLater(new Runnable() { public void run() { barre.setIndeterminate(true); } }); } }.run(); try {Thread.sleep(4000);} catch (Exception e) { } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { new Main(); } }); } }
Pouvez vous m'aiguiller ?
Merci d'avance.
eponyme
Partager