Bonjour,
Je me suis sorti de mes problèmes de synchronisation et de rafraîchissement graphique de mon dernier message mais j'ai besoin d'éclaircissements : d'ailleurs en fait le vrai problème n'était pas un problème de synchronisation contrairement à ce que je pensais.
Donc j'ai une méthode qui ne doit pas pouvoir s'exécuter plusieurs fois en parallèle, elle s'auto-exclut.
Comme elle redessine l'interface j'ai englobé le code de la méthode par SwingUtility
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class TestSynchro { private void maMethodeSynchrone() { //cette méthode fait plusieurs chose dont redessiner l'interface graphique //elle ne doit pas pouvoir être appelée tant qu'elle est en cours d'exécution } }
J'ai utilisé une variable de classe pour synchroniser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 private void maMethodeSynchrone() { SwingUtilities.invokeLater(new Runnable() { public void run() { } }); }
J'ai essayé aussi cette méthode
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
18
19
20
21 public class TestSynchro { boolean verrou = false private void maMethodeSynchrone() { SwingUtilities.invokeLater(new Runnable() { public void run() { while(verrou) { Thread.sleep(200); } verrou = true; .../... traitement verrou = false; } }); } }
J'ai plusieurs questions
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
18
19
20
21 public class TestSynchro { Boolean verrou = false; //on veut utiliser synchronized(verrou) donc verrou doit être un objet private void maMethodeSynchrone() { SwingUtilities.invokeLater(new Runnable() { public void run() { synchronized(verrou) { verrou = true; .../... traitement verrou = false; } } }); } }
1) est-il vraiment nécessaire d'utiliser SwingUtilities ici ? Le revalidate() est en fait appelé en dehors de la méthode, mais il y a plusieurs setSize, setPreferredSize et j'utilise un JScrollPane qui ne semble pas ThreadSecurity ?
2) quelle est la meilleur façon de verrouiller la méthode, la première ou la deuxième ?
3) dans la deuxième, est-il nécessaire de donner une valeur à verrou ?
Merci de vos réponses.
Partager