Attendre un laps de temps avant la prochaine instruction (sans threads)

Résolu
dachu Messages postés 8 Date d'inscription vendredi 8 juillet 2005 Statut Membre Dernière intervention 5 décembre 2005 - 26 nov. 2005 à 14:28
jcodeunpeu Messages postés 365 Date d'inscription mercredi 9 novembre 2005 Statut Membre 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

7 réponses

jcodeunpeu Messages postés 365 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 2 décembre 2006 2
27 nov. 2005 à 12:06
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 ?
3
dachu Messages postés 8 Date d'inscription vendredi 8 juillet 2005 Statut Membre Dernière intervention 5 décembre 2005
27 nov. 2005 à 12:11
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
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 nov. 2005 à 14:32
Pour t'arrêter 1 seconde:

try{Thread.currentThread().sleep(1000);}
catch(Exception e){}
0
dachu Messages postés 8 Date d'inscription vendredi 8 juillet 2005 Statut Membre Dernière intervention 5 décembre 2005
26 nov. 2005 à 14:59
Merci pour votre réponse mais malheureusement cela fait exactement la même chose...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
26 nov. 2005 à 15:15
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
0
dachu Messages postés 8 Date d'inscription vendredi 8 juillet 2005 Statut Membre Dernière intervention 5 décembre 2005
26 nov. 2005 à 15:20
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 !
0
jcodeunpeu Messages postés 365 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 2 décembre 2006 2
27 nov. 2005 à 12:18
bon ben d'accord alors, salut.
0
Rejoignez-nous