Bonjour
Suite à mes déboires d'un JProgressBar qui ne se remplissait pas, j'ai fouillé sur le site (à moins que l'un d'entre vous ne me l'ai recommandé) et je suis tombé sur ce lien très intéressant: http://alwin.developpez.com/tutorial/JavaThread/.
Sur ce lien est expliqué la progression d'un JProgressBar en utilisant un thread. J'ai donc voulu l'implémenter.
Voici la call-back d'un JButton qui déclenche l'opération de progression:
Voici la classe LongTraitement:
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 jButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent evt){ WaitDialog wait = new WaitDialog(); wait.setAlwaysOnTop(true); String s = (String)OntologyChooser.jComboBox.getSelectedItem(); SearchOntology so = new SearchOntology(s); Iterator i = Makanko.proteinList.iterator(); int size = Makanko.proteinList.size(); int cpt = 0; while(i.hasNext()){ Protein protein = (Protein)i.next(); cpt++; nb = (int)((cpt*100)/size); System.out.println(""+protein.nom+" "+nb); protein.geneontology_accession = so.getOntologyProtein(protein.nom); if(protein.geneontology_accession.compareTo("")!=0){ protein.ontology_definition = so.getOntologyDefinition(protein.geneontology_accession); } Thread t = new Thread() { public void run() { LongTraitement action = new LongTraitement(); action.traitementLong(); } }; t.start(); } wait.setVisible(false); wait.dispose(); exitForm(evt); }});
et enfin, la JDialog qui contient la barre de remplissage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class LongTraitement { public void traitementLong() { for( int i = 0; i < 100; i++ ) { WaitDialog.jProgressBar.setValue(OntologyChooser.nb); try { Thread.sleep(100); } catch (InterruptedException e) {} } } }
Mon problème est que ma JDialog apparait mais, la JProgressbar n'apparaît pas et ne se remplit pas alors que le traitement est correct.
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 import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import javax.swing.JPanel; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JProgressBar; public class WaitDialog extends JDialog{ public static JPanel jContentPane = null; private JLabel jLabel = null; public static JProgressBar jProgressBar = null; /** * This is the default constructor */ public WaitDialog() { super(); initialize(); } /** * This method initializes this * * @return void */ private void initialize() { this.setSize(300, 200); this.setTitle("Processing"); this.setContentPane(getJContentPane()); this.pack(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation((screenSize.width - 512) / 2, (screenSize.height - 512) / 2); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); //this.setDefaultLookAndFeelDecorated(false); //this.setUndecorated(true); this.setVisible(true); } /** * This method initializes jContentPane * * @return javax.swing.JPanel */ private JPanel getJContentPane() { if (jContentPane == null) { jLabel = new JLabel(); jLabel.setText("Please, wait while procesing"); jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(jLabel, java.awt.BorderLayout.NORTH); jContentPane.add(getJProgressBar(), java.awt.BorderLayout.CENTER); } return jContentPane; } /** * This method initializes jProgressBar * * @return javax.swing.JProgressBar */ private JProgressBar getJProgressBar() { if (jProgressBar == null) { jProgressBar = new JProgressBar(); jProgressBar.setStringPainted(true); jProgressBar.setMinimum(0); jProgressBar.setMaximum(100); jProgressBar.setValue(0); } return jProgressBar; } }
Merci d'avance de vos réponses.
@++
Partager