Faire patienter l'utilisateur pendant un traitement...
3 réponses
AureL
Bonjour,
J'ai fais un programme de traitement d'images et je souhaiterais à plusieurs
endroits de mon programme ajouter une fenêtre pour faire patienter
l'utilisateur pendant le traitement.
En clair, j'aimerais savoir comment ouvrir une fenêtre pendant l'exécution
d'une méthode et la refermer dès que la méthode a fini... Voici un exemple :
FenetrePatienter fenetre = new FenetrePatienter(this);
this.methodeLongue();
En lui passant l'objet (this) qui lance la méthode longue, ça permettrait
(je pense) à la fenêtre de savoir quand cet objet (this) a fini son travail
et donc quand la fenêtre peut se fermer elle-même.
J'ai beaucoup cherché, entre les Thread, les JProgressBar et les
ProgressMonitor, mais je n'arrive pas à faire fonctionner toutes ces
solutions...
Est-ce que quelqu'un pourrait m'y aider en donnant un exemple de code ?
public void MaFonctionLongue() { affiche ma fenetre
mon traitement long
efface ma fenetre }
ou dans ton code...
affiche ma fenetre MaFonctionLongue efface ma fenetre
En espérant que ta fonction longue ne soit pas multithread... (au moins qu'elle soit bloquante.)
-- Isammoc
Symon
Il faut que tu utilises un thread particulier pour ton traitement afin de ne pas mobiliser le thread AWT/Swing avec ton traitement. En règle générale, il faut toujours essayer de séparer la logique UI de la logique métier.
Ca peut ressembler à ca :
FenetrePatienter fenetre = new FenetrePatienter(this);
puis, dans ta fenetre d'attente :
Thread exec = new Thread() { public void run() { monObjetMetier.methodeLongue(); } }; exec.run();
Ta dialogue de progression aura ainsi une référence sur ton traitement (pour indiquer son avancement avec une progress bar par exemple).
En espérant que cela t'aide à résoudre ton problème.
Simon
AureL wrote:
Bonjour,
J'ai fais un programme de traitement d'images et je souhaiterais à plusieurs endroits de mon programme ajouter une fenêtre pour faire patienter l'utilisateur pendant le traitement.
En clair, j'aimerais savoir comment ouvrir une fenêtre pendant l'exécution d'une méthode et la refermer dès que la méthode a fini... Voici un exemple :
FenetrePatienter fenetre = new FenetrePatienter(this); this.methodeLongue();
En lui passant l'objet (this) qui lance la méthode longue, ça permettrait (je pense) à la fenêtre de savoir quand cet objet (this) a fini son travail et donc quand la fenêtre peut se fermer elle-même.
J'ai beaucoup cherché, entre les Thread, les JProgressBar et les ProgressMonitor, mais je n'arrive pas à faire fonctionner toutes ces solutions...
Est-ce que quelqu'un pourrait m'y aider en donnant un exemple de code ?
Merci énormément d'avance :)
AureL
Il faut que tu utilises un thread particulier pour ton traitement afin
de ne pas mobiliser le thread AWT/Swing avec ton traitement. En règle
générale, il faut toujours essayer de séparer la logique UI de la
logique métier.
Ca peut ressembler à ca :
FenetrePatienter fenetre = new FenetrePatienter(this);
puis, dans ta fenetre d'attente :
Thread exec = new Thread() {
public void run() {
monObjetMetier.methodeLongue();
}
};
exec.run();
Ta dialogue de progression aura ainsi une référence sur ton traitement
(pour indiquer son avancement avec une progress bar par exemple).
En espérant que cela t'aide à résoudre ton problème.
Simon
AureL wrote:
Bonjour,
J'ai fais un programme de traitement d'images et je souhaiterais à plusieurs
endroits de mon programme ajouter une fenêtre pour faire patienter
l'utilisateur pendant le traitement.
En clair, j'aimerais savoir comment ouvrir une fenêtre pendant l'exécution
d'une méthode et la refermer dès que la méthode a fini... Voici un exemple :
FenetrePatienter fenetre = new FenetrePatienter(this);
this.methodeLongue();
En lui passant l'objet (this) qui lance la méthode longue, ça permettrait
(je pense) à la fenêtre de savoir quand cet objet (this) a fini son travail
et donc quand la fenêtre peut se fermer elle-même.
J'ai beaucoup cherché, entre les Thread, les JProgressBar et les
ProgressMonitor, mais je n'arrive pas à faire fonctionner toutes ces
solutions...
Est-ce que quelqu'un pourrait m'y aider en donnant un exemple de code ?
Il faut que tu utilises un thread particulier pour ton traitement afin de ne pas mobiliser le thread AWT/Swing avec ton traitement. En règle générale, il faut toujours essayer de séparer la logique UI de la logique métier.
Ca peut ressembler à ca :
FenetrePatienter fenetre = new FenetrePatienter(this);
puis, dans ta fenetre d'attente :
Thread exec = new Thread() { public void run() { monObjetMetier.methodeLongue(); } }; exec.run();
Ta dialogue de progression aura ainsi une référence sur ton traitement (pour indiquer son avancement avec une progress bar par exemple).
En espérant que cela t'aide à résoudre ton problème.
Simon
AureL wrote:
Bonjour,
J'ai fais un programme de traitement d'images et je souhaiterais à plusieurs endroits de mon programme ajouter une fenêtre pour faire patienter l'utilisateur pendant le traitement.
En clair, j'aimerais savoir comment ouvrir une fenêtre pendant l'exécution d'une méthode et la refermer dès que la méthode a fini... Voici un exemple :
FenetrePatienter fenetre = new FenetrePatienter(this); this.methodeLongue();
En lui passant l'objet (this) qui lance la méthode longue, ça permettrait (je pense) à la fenêtre de savoir quand cet objet (this) a fini son travail et donc quand la fenêtre peut se fermer elle-même.
J'ai beaucoup cherché, entre les Thread, les JProgressBar et les ProgressMonitor, mais je n'arrive pas à faire fonctionner toutes ces solutions...
Est-ce que quelqu'un pourrait m'y aider en donnant un exemple de code ?