Bonjour, bonsoir les gens
Depuis un certains temps je me suis mis à créer une application en JAVA assez banale pour éviter de perdre les connaissances que j'avais sur le langage étant donné que dans mes études je n'en fais plus pour le moment.
Cette application est censée me permettre de gérer une liste non exhaustive de film que j'ai vu (oui ça n'a pas beaucoup d'intérêt, je le concède). A l'origine je gérais cette liste via un fichier excel.
C'est pourquoi mon application permet d'aller lire ce fichier et de créer les objets films que je veux pour aller les stocker dans ma base de données. La liste est assez longue et donc l'insertion de tous les films prends du temps, temps durant lequel je ne peux rien faire sur mon application.
J'ai vu que pour comblé l'attente on pouvait créer des barres de progression et mon problème arrive.
Pour m'aider j'ai cherché sur internet différente façon d'y parvenir et j'ai trouvé la façon la plus simple sur le site sur lequel nous sommes :
http://www.developpez.net/forums/d30...gression-java/
Le petit exemple présenté marche très bien dans une application à part (je l'ai testé). Cependant une fois que j'essaye de le mettre dans le code de mon application, ça ne marche plus c'est à dire que au moment où je suis censé voir la progression, la fenêtre contenant la barre est blanche et une fois la progression finie tout apparaît à l'écran.
La première pièce jointe montre bien la fenêtre de la barre de progression qui est blanche.
Et la deuxième montre que la progression est finie et que tout apparaît.
Maintenant voici les portions gérant cette barre.
En premier la fenêtre contenant la barre de progression.
La fenêtre est créée automatique en fonction des composants choisis grâce à Netbeans (je sais pas si c'est clair mais en gros le code que j'ai écrit là est court)
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 package fenetre; public class Progression extends javax.swing.JFrame { public Progression(int nbFilm) { initComponents(); setLocationRelativeTo(null); setTitle("Progression"); this.fin.setEnabled(false); this.film.setText("0"); this.filmTot.setText(String.valueOf(nbFilm)); } public void majValeur(int valeur, int nbFilm){ this.barre.setValue(valeur); this.film.setText(String.valueOf(nbFilm)); if(valeur == 100){ this.fin.setEnabled(true); } } @SuppressWarnings("unchecked") //Generated Code private void finActionPerformed(java.awt.event.ActionEvent evt) { dispose(); } // Variables declaration - do not modify private javax.swing.JProgressBar barre; private javax.swing.JLabel film; private javax.swing.JLabel filmTot; private javax.swing.JButton fin; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel4; // End of variables declaration }
Ensuite la fonction dans laquelle j'appelle ma méthode majValeur(int valeur)
J'ai en fait pris le code que j'ai trouvé et je l'ai encastré dans ma méthode en adaptant ma méthode pour que la valeur de la progression se mette à jour.
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 private void inserer(int debut, int fin){ dispose(); try{ FileInputStream fis = new FileInputStream(this.fichierExcel); XSSFWorkbook wbk = new XSSFWorkbook(fis); XSSFSheet sht = wbk.getSheetAt(0); int ligneDeb, ligneFin; if(debut == 0 && fin == 0){ ligneDeb = sht.getFirstRowNum() + 1; ligneFin = sht.getLastRowNum(); }else{ ligneDeb = debut; ligneFin = fin; } Progression prog = new Progression(ligneFin-ligneDeb+1); prog.setVisible(true); prog.majValeur(0, 0); for(int i = ligneDeb; i <= ligneFin; i++){ XSSFRow row = sht.getRow(i); XSSFCell cRang = row.getCell(Integer.valueOf(this.rang.getText())-1); XSSFCell cTitre = row.getCell(Integer.valueOf(this.titre.getText())-1); XSSFCell cNumero = row.getCell(Integer.valueOf(this.numero.getText())-1); XSSFCell cDetail = row.getCell(Integer.valueOf(this.detail.getText())-1); XSSFCell cAnnee = row.getCell(Integer.valueOf(this.annee.getText())-1); cRang.setCellType(Cell.CELL_TYPE_STRING); cTitre.setCellType(Cell.CELL_TYPE_STRING); cNumero.setCellType(Cell.CELL_TYPE_STRING); cDetail.setCellType(Cell.CELL_TYPE_STRING); cAnnee.setCellType(Cell.CELL_TYPE_STRING); String rangLoc = cRang.getStringCellValue(); String titreLoc = cTitre.getStringCellValue(); String numeroLoc = cNumero.getStringCellValue(); String detailLoc = cDetail.getStringCellValue(); String anneeLoc = cAnnee.getStringCellValue(); Film film; if(numeroLoc.equals("")){ film = new Film("FILM", rangLoc, titreLoc, Integer.valueOf(anneeLoc)); }else{ film = new Franchise("FRANCHISE", rangLoc, titreLoc, Integer.valueOf(anneeLoc), Integer.valueOf(numeroLoc), detailLoc); } //this.dao.ajouter(film); this.liste.put(film.getId(), film); int val = ((i-ligneDeb+1)*100)/(ligneFin-ligneDeb+1); try{ Thread.sleep(20); prog.majValeur(val, (i-ligneDeb+1)); }catch(InterruptedException ex){ System.out.println("plop"); } } this.modele.setListe(liste); this.modele.fireTableDataChanged(); /*dispose(); JOptionPane.showMessageDialog(this, "Fichier inséré avec succès");*/ } catch (FileNotFoundException ex) { Logger.getLogger(ChargerFilm.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(ChargerFilm.class.getName()).log(Level.SEVERE, null, ex); }
Donc voilà. Cela fait plusieurs journées que je m'esquinte les yeux sur mon écran à essayer de trouver une solution sur Internet et dans le désespoir de ne pas la trouver je post un nouveau topique sur le forum.
Voilà voilà les gens, j'espère que vous pourrez m'aider.
Merci par avance
Partager