CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] attendre un évènement f

anothercodeds
anothercodeds
Niveau 9
04 septembre 2010 à 12:25:12

:salut:

J'ai un petit problème dans mon projet. Je dois attendre qu'une condition soit remplie pour continuer le programme. Cette condition peut être remplie après un ou plusieurs clics de l'utilisateur sur des bouton. Voilà comment j'ai codé la chose:

condition = true;
while(condition);
...Suite du programme

et dans les ActionListener, j'ai mis une vérification qui, si la condition est remplie, met conddition à false. Cependant, quand je lance le programme et que j'arrive à ce point, le programme bug, la fenêtre ne répond plus et elle devient noir.

Pouvez-vous m'aider ? :merci:

dnob700
dnob700
Niveau 10
04 septembre 2010 à 13:13:22

c'est normal, tu as une boucle sans fin qui consomme toutes les ressources de ton CPU.

Je ne connais pas Java (pas encore assez en tout cas) et donc je ne sais pas dans quelle contexte tout ça s'exécute. Deux possibilité si les ActionListener s'exécute dans un autre thread que ta boucle, alors il suffit de mettre une "pause" dans la boucle (pas la moindre idée de la fonction mais ça pourrait être un truc de genre System.Threading.pause ou sleep ou je ne sais quoi) avec un temps très court (voir 0, ça suffit) pour que le thread de la boucle rende la main entre chaque tour de boucle.

S'il n'y a qu'un seul thread et que la fonction qui exécute ta boucle est censé rendre la main, alors ça ne suffira pas. Et là il faut réarranger ton code. Le plus simple est que ce soit le ActionListener qui appelle une fonction qui vas exécuter la suite de ton programme, plutôt que de bloquer dans la boucle.

Cette deuxième solution est probablement la bonne dans tout les cas.

anothercodeds
anothercodeds
Niveau 9
04 septembre 2010 à 14:49:35

merci, je vais essayer

Bunyan
Bunyan
Niveau 17
04 septembre 2010 à 21:16:45

Si ta condition ne peut être QUE vérifiée après un événement quelconque, autant ne pas faire de boucles du tout et vérifier la condition uniquement dans ces événements, non ?

Pseudo supprimé
Pseudo supprimé 05 septembre 2010 à 01:29:03

Si tu tiens absolument a mettre en pause un thread tant qu'une condition n'est pas remplie, tu peut utiliser un mutex, qui sera débloqué par un autre thread, par exemple celui qui traite tes évenements.

Tu peut considérer les mutex comme des feux, rouge le programme s'arrete, vert il repart...

http://download-llnw.oracle.com/javase/6/docs/api/java/util/concurrent/locks/ReentrantLock.html

Mais bon, ce n'est pas prévu pour ton usage, à la base. C'est plutôt fait pour protéger les accès concurrents à une ressource.

Cela dit, ça fonctionnera...

saleGauss
saleGauss
Niveau 9
06 septembre 2010 à 17:33:41

Faire une boucle infinie pour tester ce genre de choses est idiot, étant donné que les ActionsListener font déjç cela pour toi, sans te pomper toutes tes ressources.

Fais juste ce que tu as à faire dans l'actionListener qui va bien, en mettant ton bool mon_bool (ou je ne sais quoi d'autre) à la valeur qui va bien quand l'action se produit.
Si plusieurs actions peuvent mener à cette situation, crée toi une fonction f qui réalise tes actions, et appelle f depuis toutes les réalisations d'événements qui t'intéressent.

Et ta condition if(mon_bool) sera placée juste à l'endroit de ton code où tu as besoin de vérifier que cette condition de pré-requis est remplie.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment