Attendre un laps de temps avant la prochaine instruction (sans threads) [Résolu]

dachu 8 Messages postés vendredi 8 juillet 2005Date d'inscription 5 décembre 2005 Dernière intervention - 26 nov. 2005 à 14:28 - Dernière réponse : jcodeunpeu 368 Messages postés mercredi 9 novembre 2005Date d'inscription 2 décembre 2006 Dernière intervention
- 27 nov. 2005 à 12:18
Bonjour,

Voilà je réalise un petit jeu comme projet de fin d'année pour mes études. J'utilise JBuilder 2005 et donc travaille sur un projet avec une interface graphique.

J'ai besoin d'une fonction qui marque un temps d'arret (qu'on lui indique en millisecondes par exemple). J'ai trouvé les 'wait()' et les 'sleep()' des threads, mais cela ne fonctionne pas comme cela devrait !

Je vous montre le morceau de code concerné, ce sera plus simple à expliquer :

void patienter(int periode) {
try {
Thread.sleep(periode);
} catch (Exception ex) {}
}
void allumerTouche(int touche){
switch(touche) {
case 0 : hg_label.setIcon(hg_allume) ;
break ;
case 1 : hd_label.setIcon(hd_allume) ;
break ;
case 2 : bg_label.setIcon(bg_allume) ;
break ;
case 3 : bd_label.setIcon(bd_allume) ;
break ;
}
}
void eteindreTouche(int touche) {
switch(touche) {
case 0 : hg_label.setIcon(hg_normal) ;
break ;
case 1 : hd_label.setIcon(hd_normal) ;
break ;
case 2 : bg_label.setIcon(bg_normal) ;
break ;
case 3 : bd_label.setIcon(bd_normal) ;
break ;
}
}
void jouerSuite() {
for (int i=0;i<nbVal;i++) {
patienter(500) ;
allumerTouche(suite[i]) ;
patienter(1000) ;
eteindreTouche(suite[i]) ;
}
}

Voila, en fait à l'exécution je dois cliquer sur un bouton pour lancer le jeu. A cause de l'attente, le bouton reste enfoncer et rien ne se passe. Les fonctions marchent bien indépendemment pourtant et le bouton lance bel et bien le jeu car quand j'enleve les 'pause", tout fonctionne normalement mais beaucoup trop vite ! Normalement, je devrais avoir une image qui se change, puis qui revient à son état initial, mais elle ne bouge pas du tout...

Merci pour votre aide...
dachu
Afficher la suite 

7 réponses

Répondre au sujet
jcodeunpeu 368 Messages postés mercredi 9 novembre 2005Date d'inscription 2 décembre 2006 Dernière intervention - 27 nov. 2005 à 12:06
+3
Utile
Salut,
on a la facheuse habitude je vois de ne rien mettre entre les crochets des catch exception tant on est sur que l'erreur est prévue ...
je commencerai donc par mettre un leger system.out.print dans Exception de la méthode patienter juste pour voir si il n'y a rien qui ressemblerait à 'current thread not owner ' ...
ou 'illegal state ... quelquechose ...'
en suite, pourrais tu montrer le corps de ta méthode run(),
fais un petit teste, remplace mommentanément la fonction jouerSuite par :


void jouerSuite (){
long t1 = System.currentTimeMillis();
int i = 0;
for(; i < 2000000000;i++)
if((System.currentTimeMillis() - t1) > 500) break;
System.out.println("fini : i = " + i);


}
tu pourras voir combien de fois tu as appelé les méthodes contenu dans jouerSuite()
si tu allume 5 000 000 de fois une ampoule en une demi-seconde et que tu ne la vois pas s'éteindre, rassure toi, c'est normal
A+ ciao.
Ps : montre run() et on pourra rectifier ce qui ne va pas, ok ?
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jcodeunpeu
dachu 8 Messages postés vendredi 8 juillet 2005Date d'inscription 5 décembre 2005 Dernière intervention - 27 nov. 2005 à 12:11
+3
Utile
Bonjour,

Merci de vos réponses, c'est vraiment bien gentil !

Je viens tout juste de trouver la solution, la nuit porte conseil ;-) En fait, j'ai séparé mon programme en plusieurs méthodes dont une pour tout ce qui est interface graphique et donc listener, actionperform, ... et dont une autre gère uniquement le jeu quand il est lancé ! Du coup, quand je fais une pause, cela fonctionne sans pénaliser le graphique... C'était tout bête, mais bon ;-)

Merci encore en tout cas !

Bien à vous,
Damien
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de dachu
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 26 nov. 2005 à 14:32
0
Utile
Pour t'arrêter 1 seconde:

try{Thread.currentThread().sleep(1000);}
catch(Exception e){}
Commenter la réponse de vecchio56
dachu 8 Messages postés vendredi 8 juillet 2005Date d'inscription 5 décembre 2005 Dernière intervention - 26 nov. 2005 à 14:59
0
Utile
Merci pour votre réponse mais malheureusement cela fait exactement la même chose...
Commenter la réponse de dachu
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 26 nov. 2005 à 15:15
0
Utile
J'ai pas trop compris le problème alors... S'il faut faire une pause, on est bien obligé d'attendre dans le processus actuel
Commenter la réponse de vecchio56
dachu 8 Messages postés vendredi 8 juillet 2005Date d'inscription 5 décembre 2005 Dernière intervention - 26 nov. 2005 à 15:20
0
Utile
C'est bien ce qu'il me semble aussi et pourtant ça ne marche pas ! Si je sépare deux 'println()' par une fonction pour attendre, ca fonctionne et pourtant dans ce cas-ci ça ne marche pas... Et les fonctions que j'appelle fonctionnent bel et bien donc c'en est presque incompréhensible !
Commenter la réponse de dachu
jcodeunpeu 368 Messages postés mercredi 9 novembre 2005Date d'inscription 2 décembre 2006 Dernière intervention - 27 nov. 2005 à 12:18
0
Utile
bon ben d'accord alors, salut.
Commenter la réponse de jcodeunpeu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.