Bonjour, dans le cadre d'un projet pour mes études je développe un logiciel de retouche d'images.
Pour les effets spéciaux j'aimerai qu'une boite de dialogue s'affiche permettant à l'utilisateur de modifier des valeurs qui seront appliquées à l'image (par exemple pour la luminosité on aura un JSlider et un JTextField permettant de modifier la valeur).
Pour chaque effet j'implémente une interface "Plugin" qui contient cette fonction :
Le problème est que la ligne "return this.bi" est exécutée directement une fois que la boite de dialogue est affichée, donc avec les valeurs par défaut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public BufferedImage modify(BufferedImage bi) { this.bi = bi; this.afficherIHM(); return this.bi; }
J'ai donc ajouté une synchronisation comme ceci :
La méthode notify() est appelée lorsque je clique sur le bouton de la boite de dialogue.
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 public BufferedImage modify(BufferedImage bi) { this.bi = bi; this.afficherIHM(); synchronized(this){ while (this.pret==false) { try { this.wait(); } catch(InterruptedException e) {} } } return this.bi; }
Le problème est qu'au lieu de ne bloquer que la méthode modify(), le wait() bloque toute l'application.
J'ai essayé d'appliquer cette méthode avec un exemple simple, le wait() ne bloque que la fonction qui l'appelle, je ne comprend donc pas d'où peut venir l'erreur.
Si quelqu'un a une idée, soit sur comment corriger mon problème, soit sur une méthode plus simple à utiliser, merci de m'en faire part.
Partager