Attendre avant de poursuivre

Attendre avant de poursuivre - Java - Programmation

Marsh Posté le 28-07-2004 à 13:15:43    

Bonjour,
 
J'aimerai attendre qq secondes dans mon code, c'est a dire suspendre l'execution du code.
 
J'ai essayé d'utilisé la classe Timer, mais comment "bloquer" l'execution? car j'arrive à "faire" qqchose apres un certain temps :
 

Code :
  1. ActionListener taskPerformer = new ActionListener() {
  2.       public void actionPerformed(ActionEvent evt) {
  3.             thisJPanel.show();
  4.       }};
  5. timer = new Timer(delay, taskPerformer);


 
mais moi je voudrais juste bloquer l'execution du "code":
 
genre:
 

Code :
  1. ---code---
  2. timer = new Timer(delay);
  3. "attendre timer";
  4. ---code suite---


 
je vois pas.
 
j'espere que mes explications sont pas trop brouillon...
 
merci d'avance

Reply

Marsh Posté le 28-07-2004 à 13:15:43   

Reply

Marsh Posté le 28-07-2004 à 13:18:27    

java.lang.Thread. sleep(long millis)


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 28-07-2004 à 13:18:39    

Thread.sleep(5000);

Reply

Marsh Posté le 28-07-2004 à 13:21:58    

oulà, j'avais pas vu. Il faut pas faire ça dans un event handler, sinon, tu bloques toute l'interface graphique.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 28-07-2004 à 13:44:11    

merci j'essaie de faire ca...

Reply

Marsh Posté le 29-07-2004 à 06:53:30    

nraynaud a écrit :

oulà, j'avais pas vu. Il faut pas faire ça dans un event handler, sinon, tu bloques toute l'interface graphique.


 
En effet, ca bloque l'interface graphique, comment faire alors?

Reply

Marsh Posté le 29-07-2004 à 10:10:07    

Plusieurs possibilités
 
1- essaie celle-là
 
while(!flag){
 
try{
wait();
}catch(Exception exc){}
 
}//end while


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein
Reply

Marsh Posté le 29-07-2004 à 10:18:45    

excuse fausse manip
 
plusieurs possibilités
1- try-catch avec wait
 
while(!flag){
 
try{
wait();
}catch(Exception exc){}
 
}//end while
 
par contre il faut declarer flag comme un boolean de type volatile que tu modifiera pour pouvoir continuer
 
 
2- la méthode Thread.sleep(nombredemillisecondes) devrait aussi marcher
 
3- tu recuperes le temps courant de la machine
t1=System.currentTimeMillis();
 
ensuite tu fais une boucle dans laquelle
 tu ne fais rien
 
while(System.currentTimeMillis()<t1+Delta);
 
Delta etant le temps que tu voudrais attendre  
 
je pense que mes soltutions te seront utiles
 :)  


---------------
"Rendez tout aussi simple que possible mais ne simplifierez rien" Albert Einstein
Reply

Marsh Posté le 29-07-2004 à 11:10:04    

j'vais essayer merci

Reply

Marsh Posté le 29-07-2004 à 11:47:27    

si tu veux pas bloquer ton UI, il faut créer un thread (ou un processus, mais le thread ici c'est mieux) dans lequel tu exécutes le code (pense à créer des mutex et autres locks histoire d'éviter l'exécution de plusieurs threads identiques et accès à des données en cours de création/modification).
 
en gros:
 
UI
|
|
action
|\
UI\
|.thread de traitement (en // avec le thread de base contenant l'UI)
|.|
|.|
|.|
|.|
|.|
|.Fin du traitement
|.Kill du thread de traitement
|
|
 
de cette manière, le traitement de l'action ne bloque pas l'UI et un sleep ne pose aucun problème (il fait pauser le thread secondaire mais pas l'UI)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-07-2004 à 11:47:27   

Reply

Marsh Posté le 29-07-2004 à 12:20:35    

ruready a écrit :

En effet, ca bloque l'interface graphique, comment faire alors?

il sert à quoi ton arrêt ?


---------------
trainoo.com, c'est fini
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed