Indicateur de progression dans une JFrame

Indicateur de progression dans une JFrame - Java - Programmation

Marsh Posté le 13-12-2004 à 15:05:08    

Bonjour,
 
Voilà, j'ai fait une petite interface en Swing qui me lance un traitement très long (une dizaine de requêtes SQL), le tout pouvant durer plus de 2heures.
 
J'aimerais que mon interface se rafraîchisse suffisamment souvent pour mettre à jour un JTextField qui contiendrait le numéro de requête en cours : elles sont lancées dans une boucle for(), j'aimerais donc qu'à chaque passage dans cette boucle, on mette à jour le champ texte.
 
J'ai essayé pas mal de méthodes, repaint() du Container, du JTextField, faire un sleep avant et après le repaint... bref plein de trucs cochons (je tâtonne en interfaces) mais rien ne marche, et la valeur de mon champ ne change qu'une fois le traitement terminé.
 
Auriez-vous une idée pour me débloquer?
Merci d'avance :jap:

Reply

Marsh Posté le 13-12-2004 à 15:05:08   

Reply

Marsh Posté le 13-12-2004 à 15:35:44    

Multithreading ?

Reply

Marsh Posté le 13-12-2004 à 15:39:32    

Merci,
 
j'ai essayé de créer un thread parallèle qui effectue le repaint (là aussi en jouant un peu avec des wait et sleep) et ça n'a rien changé...
Peut être que je me trompe de méthode et que ce n'est pas le repaint qu'il faut appeler ?

Reply

Marsh Posté le 13-12-2004 à 15:48:43    

Zedar a écrit :

Merci,
 
j'ai essayé de créer un thread parallèle qui effectue le repaint (là aussi en jouant un peu avec des wait et sleep) et ça n'a rien changé...
Peut être que je me trompe de méthode et que ce n'est pas le repaint qu'il faut appeler ?


 
C'est bien repaint qu'il faut appeler pour mettre à jour un composant Swing. Par contre il faut t'assurer que les opérations d'affichage se font bien dans le "event-dispatching thread" et le reste ailleur.
 
http://java.sun.com/docs/books/tut [...] index.html
 
et
 
http://java.sun.com/docs/books/tut [...] reads.html
 
Sinon poste ton code (si c'est pas trop gros, ou essaie d'isoler le problème), ça peut toujours aider.


Message édité par Profil supprimé le 13-12-2004 à 15:49:18
Reply

Marsh Posté le 13-12-2004 à 15:54:34    

Disons que j'ai essayé vraiment pas mal de manières de caser mon repaint :)
 
Là j'ai un programme très simple, une classe qui construit mon interface (extends JFrame), et une autre classe qui contient le corps de mon programme (requêtes SQL et écriture dans un fichier Excel).
La méthode principale de cette dernière classe récupère ma JFrame en paramètre, j'ai donc essayé de faire un fenetre.repaint(), puis un fenetre.text.repaint() (où text est le JTextField qui m'intéresse), de rajouter un sleep avant et après... mais pas moyen, ça ne fait rien du tout.
 
Je vais regarder plus en détails ton deuxième lien sur le event-dispatching thread, je ne connais pas ça. Merci ;)

Reply

Marsh Posté le 13-12-2004 à 16:06:07    

Poste ton code parce que là à part le fait que ça marche pas, j'ai pas beaucoup d'informations. :D

Reply

Marsh Posté le 13-12-2004 à 16:33:27    

Blabla (code enlevé, désolé)


Message édité par zedar le 14-12-2004 à 11:33:18
Reply

Marsh Posté le 13-12-2004 à 17:41:04    

Snif c'est si moche que ça ? :cry:
 
Sinon j'ai essayé d'utiliser ton second lien, mais ça ne change rien... par contre je ne suis pas sûr de bien l'utiliser :(

Reply

Marsh Posté le 13-12-2004 à 18:07:01    

regarde dans le javatutorial, y'a un truc sur les thread à synchroniser avec une GUI ...regarde aussi du coté du SwingWorker ...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 13-12-2004 à 18:24:49    

Ok merci je vais regarder ça :jap:

Reply

Marsh Posté le 13-12-2004 à 18:24:49   

Reply

Marsh Posté le 14-12-2004 à 11:32:37    

Bon, merci bcp à tous, ça marche nickel avec un SwingWorker :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed