Bonjour, j'essaye de développer une application permettant de récupérer des données venant d'une base de données Oracle. Je récupère donc une liste de requêtes que j'envoie dans une boucle for.
Comme cela peut prendre du temps, je voudrais rajouter une indication sur le nombre de requetes restant et l'estimation du temps que cela va prendre. J'ai donc ajouté une fenetre qui contient quatres labels ayant pour unique but d'afficher le temps restant.
Pour mettre à jour le temps restant, j'ai crée un timer que je démarre juste avant d'envoyer mes requêtes et qui est censé mettre à jour le label toutes les secondes en appellant une fonction maj().
Mon problème est le suivant:
La fenetre s'ouvre bien, mais rien ne s'affiche dedans, et la fonction maj() ne s'éxécute pas une seule fois pendant toute la durée de la boucle "for". Des que je sors du "for", le timer se met à tourner normalement et les labels apparaissent dans la fenetre.
Est-ce un problème de ressources?
Voici mon code:
Voici le détail de la fonction maj(), simplifiée pour l'occasion mais ça ne change rien au problème:
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 JFrame framees = new JFrame("Please wait"); framees.setSize(300, 300); elapsedlab = new JLabel("Elapsed time:"); estimatedlab = new JLabel("Remaining time (estimation):"); elapsedtime = new JLabel("0"); estimatedtime = new JLabel(""); pane = new JPanel(); pane.setLayout(new GridLayout(2, 2)); pane.add(elapsedlab); pane.add(elapsedtime); pane.add(estimatedlab); pane.add(estimatedtime); framees.getContentPane().add(pane, BorderLayout.NORTH); long millidebut = System.currentTimeMillis(); milliactuel=millidebut; moy = 0; framees.show(); nb=0; nbcount=menu.getRowCount(); Timer timer = new Timer(1000, new ActionListener(){ public void actionPerformed(ActionEvent e) { maj(); } }); timer.start(); for(int i = 0; i<nbcount; i++) { String date = (String) menu.getValueAt(i, 1); if(isBefore(debut, date)>-1 && isBefore(date, fin)>-1) { String req3= req2; req3+= Integer.parseInt((String) menu.getValueAt(i, 0))+"\n"; req3+= "AND COL<"+(menu2.getRowCount())+" ORDER BY lig, col\n"; reqlist.add(new DbAccessMgt(null, cx, req3)); dateslist.add(date); } nb=i; long dif = System.currentTimeMillis()-milliactuel; moy=(moy*nb+dif)/(nb+1); }
La classe DbAccessMgt est une classe dont le constructeur envoie une requete à une connexion et qui permet de récupérer les informations sur cette requete.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void maj() { System.out.println("tic tac"); }
Merci d'avance!
Partager