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

Signaler
Messages postés
8
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
5 décembre 2005
-
Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
-
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

7 réponses

Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
2
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 ?
Messages postés
8
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
5 décembre 2005

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
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Pour t'arrêter 1 seconde:

try{Thread.currentThread().sleep(1000);}
catch(Exception e){}
Messages postés
8
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
5 décembre 2005

Merci pour votre réponse mais malheureusement cela fait exactement la même chose...
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
8
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
5 décembre 2005

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 !
Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
2
bon ben d'accord alors, salut.