OVH Cloud OVH Cloud

Faire patienter l'utilisateur pendant un traitement...

3 réponses
Avatar
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 ?

Merci énormément d'avance :)

AureL

3 réponses

Avatar
Isammoc
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
Avatar
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





Avatar
Rémi Cocula
Symon wrote:


Thread exec = new Thread() {
public void run() {
monObjetMetier.methodeLongue();
}
};
exec.run();



Attention, exec.run() ne crée pas un nouveau thread mais se contente
d'exécuter la methode run dans le thread courent. Il faut appeler
exec.start().