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

Messages postés
8
Date d'inscription
vendredi 8 juillet 2005
Dernière intervention
5 décembre 2005
- 26 nov. 2005 à 14:28 - Dernière réponse :
Messages postés
368
Date d'inscription
mercredi 9 novembre 2005
Dernière intervention
2 décembre 2006
- 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 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
368
Date d'inscription
mercredi 9 novembre 2005
Dernière intervention
2 décembre 2006
- 27 nov. 2005 à 12:06
3
Merci
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 ?

Merci jcodeunpeu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de jcodeunpeu
Meilleure réponse
Messages postés
8
Date d'inscription
vendredi 8 juillet 2005
Dernière intervention
5 décembre 2005
- 27 nov. 2005 à 12:11
3
Merci
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

Merci dachu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de dachu
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
- 26 nov. 2005 à 14:32
0
Merci
Pour t'arrêter 1 seconde:

try{Thread.currentThread().sleep(1000);}
catch(Exception e){}
Commenter la réponse de vecchio56
Messages postés
8
Date d'inscription
vendredi 8 juillet 2005
Dernière intervention
5 décembre 2005
- 26 nov. 2005 à 14:59
0
Merci
Merci pour votre réponse mais malheureusement cela fait exactement la même chose...
Commenter la réponse de dachu
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
- 26 nov. 2005 à 15:15
0
Merci
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
Messages postés
8
Date d'inscription
vendredi 8 juillet 2005
Dernière intervention
5 décembre 2005
- 26 nov. 2005 à 15:20
0
Merci
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
Messages postés
368
Date d'inscription
mercredi 9 novembre 2005
Dernière intervention
2 décembre 2006
- 27 nov. 2005 à 12:18
0
Merci
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.