Blocage des évènements au cours d'un calcul

Résolu/Fermé
benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023 - 31 mars 2022 à 09:46
benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023 - 13 avril 2022 à 15:08
Bonjour,

Dans mon programme Java, je fais des calculs longs et compliqués. Normalement, même au cours de calculs, les interruptions de l'ActionListener par ActionPerformed sont possibles: l'évènement est gardé en mémoire jusqu'à ce que le programme puisse le gérer.
Mais dans le cas qui m'occupe, je déclenche par mon menu une action, et rien ne se passe, comme si la sélection de mon MenuItem n'avait pas existé, de même avec les clics. Et ce n'est que quand mon calcul est terminé que je peux déclencher un nouvel évènement avec succès.Avez vous une idée comment je pourrais interrompre mes calculs pour faire place à l'interruption? J'ai fait différents essais mettre en sommeil par
try {Thread.sleep(50);}
catch (InterruptedException signal){System.out.println("catch ");}
ou essayer de trouver si cela venait de segments particuliers de mon calcul en supprimant l'un après l'autre ces segments: ces suppressions ne font rien, l'évènement que je pense déclencher n'arrive pas. Par contre, dès que le calcul est terminé, de nouveau les évènements peuvent être utilisés.
Avez vous une idée comment résoudre ce problème?
D'avance merci.

Configuration: Windows / Firefox 98.0

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
3 avril 2022 à 18:51
Bonjour,

Un programme peut gérer plusieurs thread qui s'exécutent en parallèle, mais ce que tu décris laisse à penser que tu fais ton calcul dans l'EDT (le thread qui gère les événements), il faudrait plutôt utiliser un nouveau thread pour faire ton calcul (par exemple un SwingWorker), ça permet de libérer l'EDT afin qu'il puisse lire les nouveaux événements qui arrivent, même si ton calcul n'est pas terminé.

Plus d'info sur l'EDT et les SwingWorker : https://rom.developpez.com/java-swingworker/
0
benoit_28 Messages postés 43 Date d'inscription vendredi 20 mars 2020 Statut Membre Dernière intervention 11 juin 2023
13 avril 2022 à 15:08
Merci KX
0