chargement avec JProgressBar - Java - Programmation
Marsh Posté le 14-04-2009 à 03:16:01
Salut,
J'ai pas compris la question.
Je récapitule ce que j'ai compris.
T'as une application Swing dans laquelle tu commences par charger une JFrame avec une JProgressBar dedans.
Tu veux faire en sorte que lorsque la barre de progression disparaisse lorsque ton traitement est terminé.
Et bien, je ne crois pas me tromper en te disant que tu dois faire ça manuellement. Tu dois également calculer la valeur de ta barre de progression (et l'assigner avec un setValue() je suppose) en temps réel. Et lorsque ton chargement est terminé, fermer ta fenêtre.
Marsh Posté le 14-04-2009 à 11:27:27
Oui ce que tu as compris est exact
mais calculer le temps d'exécution n'est pas pratique car ça dépend d'une machine à une autre !
Marsh Posté le 14-04-2009 à 12:42:51
C'est pas ce temps d'exécution là, mais le temps de ton code. Un exemple pour mieux comprendre. J'avais fais un éditeur de carte il y a quelques temps, en utilisant la progress bar pour informer sur le chargement. Et si il y avait 200 tuiles à charger pendant l'affichage de la progress bar, que j'en avais déjà chargé 100, alors c'était 50%. Ton application doit faire certains traitement pendant le temps de chargement, et c'est à toi de dire à quel pourcentage tu es après chaque partie de ton code. Autre exemple, si tu dois faire 3500 calculs pendant le chargement, au bout n calculs effectués, tu es à x = n*100/3500 %.
ceci t'aidera peut être:
http://java.sun.com/docs/books/tut [...] gress.html
Marsh Posté le 14-04-2009 à 15:04:48
Merci pour le lien
mais dans ce document il y a
progressBar = new JProgressBar(0, task.getLengthOfTask());
est ce que getLengthOfTask() est la méthode qui renvoie le temps de chargement de l'application ?
si on va faire des calculs comme t'as déjà dit : dans certain cas le progressbar se ferme alors que l'application ne s'est pas chargée totalement (si la machine devient lente par exemple ou bien si l'application essaie de se connecter à un serveur qui ne répond pas )
c'est ça mon probléme : ce temps d'exécution dont tu parles n'est pas facile à estimer car à chaque fois ça change (selon l'état du processeur, la connexion au serveur ...)
Marsh Posté le 14-04-2009 à 15:52:58
Mais tu n'as pas bien saisi la différence : le temps de calcul pour la progress bar est le nombre d'opérations que toi tu fais, peu importe la plateforme concernée.
ça sera effectivement plus rapide sur certaines machines que sur d'autres, mais pour un % donné de la progress bar, les mêmes instructions auront été effectuées quelque soit la machine. Il n'est pas question de calculer le temps en fonction des machines, mais juste de dire qu'à tel moment de ton code, ça fait x % du programme chargé, et ceci uniquement en fonction de tes appels de méthodes, etc, comme j'ai donné des exemples avant. Après oui ce pourcentage sera surement atteint plus ou moins rapidement selon les machines.
J'sais pas si t'as une boucle for (int i =0; i<100; i++) { progress = i; ...}, tu as décidé qu'à chaque fois que i est incrémenté, ton pourcentage d'accomplissement vaut i. Tu as calculé un % d'avancement quelque soit la machine.
getLengthOfTask() n'existe pas, c'est à toi de calculer la progression dans doInBackground(). Faut hériter de SwingerWorker etc. Quand tu regardes le code complet de l'exemple, tu vois bien que le getLengthOfTask n'existe pas : http://java.sun.com/docs/books/tut [...] rDemo.java, l'appel est progressBar = new JProgressBar(0, 100); et non pas progressBar = new JProgressBar(0, task.getLengthOfTask());
Toujours dans l'exemple, le pourcentage de progress est calculé dans doInBackground(), c'est la variable progress. Ensuite tu en tiens compte avec setProgress et le sleep n'est là que pour qu'on voit la barre se charger, sinon ça irait trop vite et on ne verrait pas la barre se charger.
Marsh Posté le 14-04-2009 à 18:52:45
Merci pour toi atmakefka, j'ai bien saisi la différence maintenant
je vais essayer de le faire et je vais poster le résultat sur le forum (si Dieu le veux)
Marsh Posté le 17-04-2009 à 18:19:42
voilà ça marche maintenant
merci pour votre aide !
Marsh Posté le 13-04-2009 à 19:06:17
Bonjour
j'aimerais ajouter à mon application un ProgressBar qui permet d'afficher le chargement de mon application
mais le problème c'est qu'avec JProgressBar je dois définir la valeur max à laquelle il doit etre fermé
JProgressBar progressBar = new JProgressBar(0, intProgressMaxValue);
comment remplacer ce "intProgressMaxValue" pour que le progressBar se ferme lorsque l'application se charge ?
Merci d'avance