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

  FORUM HardWare.fr
  Programmation
  Java

  comment mettre en pause un programme pendant son exécution ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comment mettre en pause un programme pendant son exécution ?

n°566806
babthefox2​002
Posté le 14-11-2003 à 15:37:17  profilanswer
 

Bonjour,
 
je souhaiterais faire un petit test : du genre je pose une question et l'utilisateur répond par oui avec la touche 'o' et par non avec 'n'.
 
Dans ce petit test, le temps de présentation des questions est important, tout comme le temps de reaction de l'utilisateur...
 
Mon probleme est le suivant :
 
J'ai un tableau 2d contenant dans une case la question, puis dans l'autre case la reponse.
Donc je fais une boucle répétant autant de fois qu'il y a de question :
 
- une présentation de la question a l'utilisateur pendant 1s (là j'utilise un Thread().sleep(1000)), puis on mesure le temps de réaction de l'utilisateur...  
-----------------------------------------------------------------
-> là je ne sait pas trop comment faire, il faut que je lance un Thread qui incrémente un entier toutes les millisecondes
un truc genre :
 
public void run() {
for(;;) {   try{sleep(1);}  
            catch (InterruptedException e) {}
            _ms++;
}
 
=> mais comment faire pour stopper le Thread lorsque l'utilisateur frappe sur une touche('o' ou 'n') ? En mettant un booleen à tester en début de run ?
----------------------------------------------------------------
 
- et enfin j'aimerais savoir comment pourrai-je stopper mon programme avant d'afficher la question suivante, tant que l'utilisateur n'a pas appuyé sur une touche ("entrée" par exemple) ? Est-ce qu'il n'y aurait pas une méthode permettant d'attendre une pression de touche avant de continuer (genre : waitKey()) ??
 
J'espère que ce que j'ai écrit est compréhensible.
Je remercie d'avance ceux qui pourront m'aider...
 
                                     Baba

mood
Publicité
Posté le 14-11-2003 à 15:37:17  profilanswer
 

n°566817
art_dupond
je suis neuneu... oui oui !!
Posté le 14-11-2003 à 15:46:58  profilanswer
 

tu peux pas simplement prendre l'heure ou quoi quand tu affiches la question puis quand il répond => le temps de réaction est donc la différence des deux


---------------
oui oui
n°566818
veryfree
Posté le 14-11-2003 à 15:48:56  profilanswer
 

GUI powwa
 
 
sinon t'as readLine(); qui  "attend" que l'utilisateur ai saisie quelque chose pour continuer l'execution du programe.

n°566819
babthefox2​002
Posté le 14-11-2003 à 15:51:32  profilanswer
 

c'est vrai que c'est pas mal comme truc, je n'y avait même pas pensé, mais de toute façon avec mon Thread et un booleen j'arrive à avoir le temps de réaction.
 
Mais tu ne sait pas comment est-ce que je peut mettre mon programme "en pause" en attendant que l'utilisateur appuie sur une touche : genre tu affiche "press any key to continue" dans un pannel, et hop le programme reprend son cours quand l'utilisateur appuie sur une touche ?

n°566820
babthefox2​002
Posté le 14-11-2003 à 15:52:18  profilanswer
 

je vais tester ton truc veryfree...

n°566871
veryfree
Posté le 14-11-2003 à 16:21:23  profilanswer
 

babthefox2002 a écrit :

c'est vrai que c'est pas mal comme truc, je n'y avait même pas pensé, mais de toute façon avec mon Thread et un booleen j'arrive à avoir le temps de réaction.
 
Mais tu ne sait pas comment est-ce que je peut mettre mon programme "en pause" en attendant que l'utilisateur appuie sur une touche : genre tu affiche "press any key to continue" dans un pannel, et hop le programme reprend son cours quand l'utilisateur appuie sur une touche ?


 
dans un pannel ??
 
jcroyait que c'etait en console :o

n°566953
bugsan
Posté le 14-11-2003 à 17:55:55  profilanswer
 

non veryfree relis son post...
bab ton truc avec le thread c'est horrible, tu appelles sleep mille fois par seconde...
 
en console je ne sais pas du tout comment faire du on-the-fly (press a key) car il me semble que les données sont envoyé dans le stream qu'apres un Enter...
 
long a = System.currentTimeMillis();
// question, réponse
long b = System.currentTimeMillis();
System.out.println("vous avez mis " + (b-a)/1000 + " secondes à répondre" );

n°566972
veryfree
Posté le 14-11-2003 à 18:11:41  profilanswer
 

bugsan a écrit :

non veryfree relis son post...
bab ton truc avec le thread c'est horrible, tu appelles sleep mille fois par seconde...
 
en console je ne sais pas du tout comment faire du on-the-fly (press a key) car il me semble que les données sont envoyé dans le stream qu'apres un Enter...
 
long a = System.currentTimeMillis();
// question, réponse
long b = System.currentTimeMillis();
System.out.println("vous avez mis " + (b-a)/1000 + " secondes à répondre" );


 
de quoi non  :heink:  
un coup c'est en console, un autre coup il parle de panel  :o  
j'essaye de comprendre quoi [:spamafote]

n°567628
babthefox2​002
Posté le 15-11-2003 à 14:48:17  profilanswer
 

Mes questions sont affichées dans un JPanel a l'aide de la methode "paintComponent(Graphic g)"...
 
Mais je crois quavec un objet Date() et la méhode getTime) je vais pouvoir men sortir au pire...
 

n°567629
babthefox2​002
Posté le 15-11-2003 à 14:50:17  profilanswer
 

en fait pour le "press any key", je cherche l'équivalent d'un getChar() en langage C, je ne sais pas s'il existe en java ?

mood
Publicité
Posté le 15-11-2003 à 14:50:17  profilanswer
 

n°567639
babthefox2​002
Posté le 15-11-2003 à 15:32:25  profilanswer
 

En fait non un "getChar()" ne marche pas car il ne marche qu'en console...
 
Je n'arrive pas à trouver...  
aidez-moi...

n°567662
babthefox2​002
Posté le 15-11-2003 à 16:21:16  profilanswer
 

personne ne veut répondre ??

n°567714
benou
Posté le 15-11-2003 à 18:18:50  profilanswer
 

babthefox2002 a écrit :

personne ne veut répondre ??


mais si ...
 
Y a peut être moyen de faire plus simple mais ca ca marche ...
 

Code :
  1. import java.io.*;
  2. public class Quizz {
  3. private String[] question = {"Est ce que java c'est bien ?", "Benou il est gentil ?", "pourquoi ?"};
  4. private String[] bonneReponse = {"oui", "bien sur", "parce que !"};
  5. private int tpsPresentation = 1000;
  6. private int tpsReponse = 10000;
  7. private Thread lecteurClavierThread;
  8. private LecteurClavier lecteurClavier;
  9. private String luClavier;
  10. public Quizz() {
  11.  this.lecteurClavier = new LecteurClavier(this);
  12.  this.lecteurClavierThread = new Thread(this.lecteurClavier, "lecteur clavier" );
  13.  this.lecteurClavierThread.setDaemon(true);
  14.  this.lecteurClavierThread.start();
  15. }
  16. public void demarrer() throws Exception {
  17.  for (int i = 0; i < this.question.length; i++) {
  18.   System.out.println("\"" + this.question[i] + "\"" );
  19.   Thread.sleep(tpsPresentation);
  20.   System.out.print("   --> Votre réponse : " );
  21.   System.out.flush();
  22.   String reponse = attenteReponse(this.tpsReponse);
  23.   if (reponse == null) {
  24.    System.out.println("\nVotre temps est écoulé.  La bonne réponse était : '" + this.bonneReponse[i] + "'" );
  25.    System.out.println("Vous êtes le maillon faible. Au revoir !" );
  26.    System.exit(0);
  27.   } else if (reponse.equalsIgnoreCase(this.bonneReponse[i])) {
  28.    System.out.println("Correct !" );
  29.   } else {
  30.    System.out.println("Mauvaise réponse. La bonne réponse était : '" + this.bonneReponse[i] + "'" );
  31.    System.out.println("Vous êtes le maillon faible. Au revoir !" );
  32.    System.exit(0);
  33.   }
  34.  }
  35.  System.out.println("\nC'était le maillon faible ! Bonne soirée. (clignement d'oeil)" );
  36.  this.lecteurClavierThread.interrupt();
  37. }
  38. /**
  39.  * Attend une réponse pdt le temps indiqué. Si aucune réponse n'est donnée dans le temps  
  40.  * imparti, retourne null
  41.  * @param tps : temps accordé
  42.  * @return la réponse ou null si temps accordé dépasse
  43.  */
  44. public String attenteReponse(int tps) throws Exception  {
  45.  this.luClavier = null;
  46.  this.lecteurClavier.lancerLecture();
  47.  synchronized (this) {
  48.   this.wait(this.tpsReponse);
  49.  }
  50.  return this.luClavier;
  51. }
  52. /**
  53.  * Cette methode est appelée lorsque d'une saisie au clavier est faite  
  54.  */
  55. public void setSaisieClavier(String s) {
  56.  this.luClavier = s;
  57.  synchronized (this) {
  58.   this.notify();
  59.  }
  60. }
  61. public static void main(String[] args) throws Exception {
  62.  new Quizz().demarrer();
  63. }
  64. // ---------------------------------------
  65. }
  66. class LecteurClavier implements Runnable {
  67. private final BufferedReader clavier;
  68. private Quizz demandeur;
  69. public LecteurClavier(Quizz demandeur) {
  70.  this.demandeur = demandeur;
  71.  this.clavier = new BufferedReader(new InputStreamReader(System.in));
  72. }
  73. public void lancerLecture() {
  74.  synchronized (this) {
  75.   this.notify();
  76.  }
  77. }
  78. public void run() {
  79.  while (! Thread.currentThread().isInterrupted()) {
  80.   synchronized (this) {
  81.    try {
  82.     this.wait();
  83.    } catch (InterruptedException e) {
  84.     break;
  85.    }
  86.   }
  87.   try {
  88.    String ligne = clavier.readLine();
  89.    this.demandeur.setSaisieClavier(ligne);
  90.   } catch (IOException e) {
  91.    throw new RuntimeException("Erreur lors de la lecture de la saisie de l'utilisateur", e);
  92.   }
  93.  }
  94. }
  95. }


---------------
ma vie, mon oeuvre - HomePlayer

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

  comment mettre en pause un programme pendant son exécution ?

 

Sujets relatifs
Comment mettre un fond sur un checkbox et un radio ?mettre des images ds un db
COBOL : comment faire une pause dans le programme ?Execution d'un prog,
[PHP] augmenter le max_execution_time dans le php.inimettre un mot de passe dans un exe ?
connaitre le temps d'execution d'un script?erreur exécution...
faire d'un programme python un executable windows (.exe) 
Plus de sujets relatifs à : comment mettre en pause un programme pendant son exécution ?


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