Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1599 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Attente conditionnelle en java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Attente conditionnelle en java

n°1952720
alterganon
Posté le 23-12-2009 à 11:15:39  profilanswer
 

Bonjour tout le monde !
Voici mon problème :
Une fonction est déclenchée par le fait que l'utilisateur appuit sur la barre espace.
Je voudrais que mon programme attente  
soit : jusqu'a ce que l'utilisateur la lache
soit : si cela fait pus de 3 seconde, que le programme continue, même si la barre espace est toujours enfoncée.
 
J'avais fait cela :
public void fire() {
while (boutonBarreEnfonce==true && tTir<3) {
      try {
    Thread.sleep(100);
   }
      catch (InterruptedException e) {
    e.printStackTrace();
   }  
      tTir=tTir+0.1;
}
}
 
et  
public void keyReleased(KeyEvent e) {
        int key = e.getKeyCode();
if (key == KeyEvent.VK_SPACE) {
         boutonTirEnfonce=false;
                 }
 
}
 
En fait java ne fait "qu'une chose à la fois" et ne vérifie pas les entrées de l'utilisateur tant qu'il n'en a pas fini avec la fonction contenant ma boucle while.
Peut-on lui dire de garder une oreille attentive aux entrés clavier en même temps ?
 
NB : Tous ce qui est question du KeyListener marche bien, le problème ne vient pas de là.
 
Un grand merci !

mood
Publicité
Posté le 23-12-2009 à 11:15:39  profilanswer
 

n°1952729
breizhbugs
Posté le 23-12-2009 à 11:27:01  profilanswer
 

Bonjour,
Je dirais que ta facon de faire n'est pas bonne: Je crois qu'en fait il faut que lorsque tu as
- un keypressed(KeyEvent.VK_SPACE) tu lances un timer t de 3 secondes ET tu positionnes boutonTirEnfonce a vrai
 
- un keyreleased(KeyEvent.VK_SPACE), tu positionnes boutonTirEnfonce a faux
- event timer t , tu positionnes boutonTirEnfonce a faux
 
(Mais j'ai l'impression que ta boucle de traitement des messages de fenetres n'est pas correcte, au vu de ta question et de ta fonction fire)

n°1952760
alterganon
Posté le 23-12-2009 à 13:25:24  profilanswer
 

Merci beaucoup, j'ai fait ce que tu m'as proposé mais j'ai encore un problème.
Je souhaite aussi pouvoir récupérer le temps t auquel l'utilisateur lache la barre espace (relativement au moment ou il a appuyé dessus, donc 0<t<3sec).
Pour cela il me faudrait une fonction de timer qui me renvoie le temps depuis le start(); mais cela n'existe pas je crois.
La fonction timer.getDelay(); me renvoie 3sec, ce n'est pas ce que je veux.
Il y a-t-il un moyen de contourner le problème ?
 
Encore merci
(Autrement tout marche trés bien)


Message édité par alterganon le 23-12-2009 à 13:28:51
n°1952864
breizhbugs
Posté le 23-12-2009 à 17:38:43  profilanswer
 

Vois du coté de java.util.date.timestamp ( http://java.sun.com/j2se/1.4.2/doc [...] stamp.html )
en prenant une mesure lors de l'appui puis une autre lors du keyreleased/timer et en faisant la soustraction

n°1952869
cbeyls
Hail to the King, Baby
Posté le 23-12-2009 à 17:45:28  profilanswer
 

breizhbugs a écrit :

Vois du coté de java.util.date.timestamp ( http://java.sun.com/j2se/1.4.2/doc [...] stamp.html )
en prenant une mesure lors de l'appui puis une autre lors du keyreleased/timer et en faisant la soustraction


 
Non non, il s'agit d'un Timestamp SQL en Java, rien à voir avec la notion de TimeSpan en .NET.
 
Le plus simple est sans doute de récupérer System.currentTimeMillis() à 2 moments différents et de soustraire les valeurs.

Message cité 1 fois
Message édité par cbeyls le 23-12-2009 à 17:48:02
n°1952875
breizhbugs
Posté le 23-12-2009 à 17:55:40  profilanswer
 

cbeyls a écrit :


 
Non non, il s'agit d'un Timestamp SQL en Java, rien à voir avec la notion de TimeSpan en .NET.
 
Le plus simple est sans doute de récupérer System.currentTimeMillis() à 2 moments différents et de soustraire les valeurs.


 
Autant pour moi, j'avais lu trop vite! il s'agit de http://java.sun.com/j2se/1.4.2/doc [...] /Date.html mais effectivement vu la grandeur de temps mesuré,  System.currentTimeMillis() est parfait

n°1952883
cbeyls
Hail to the King, Baby
Posté le 23-12-2009 à 18:12:23  profilanswer
 

Avec la classe Date on ne peut pas faire de calculs de dates, à part comparer une date à une autre pour savoir si elle est antérieure ou postérieure.
Il n'y a pas encore d'équivalant à TimeSpan en Java, mais on peut faire des calculs basiques avec la classe Calendar.

n°1952947
alterganon
Posté le 23-12-2009 à 23:15:53  profilanswer
 

Merci, la méthode de la soustraction avec Systel.currentTimeMillis() marche à merveille !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Attente conditionnelle en java

 

Sujets relatifs
reverse engineering java[JAVA] Problème méthode
[Java Swing] Problème avec drag'n'dropAide applet java niveau débutant
Erreur de compilation Java "cannot find symbol" sous ubuntu 9.04Programmer une impression en java (ac saut de ligne)
pb servlet java pour alivePdfProblème de lecture de base de données SQLite (Java)
a l'aide: creation d'un objet prix et un serveur en JAVA[JAVA] GridLayout + Box
Plus de sujets relatifs à : Attente conditionnelle en java


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR