Dans mon projet, je fais descendre des blocs d'une case toutes les secondes. De plus, quand l'utilisateur appuiera sur la touche Flèche_Bas, les blocs descendront dix fois plus vite.
J'ai d'abord pensé à utiliser Thread.sleep(delai) directement dans mon Jpanel. Cependant, lorsque ma classe était endormie, il m'était impossible de la réveiller. Donc même si l'utilisateur appuyait sur la touche, il devait attendre la fin du sleep().
J'ai ensuite pensé à utiliser des Threads.
Je me suis alors un peu renseigné sur ceux-ci ainsi que sur les méthodes wait() et notifyAll() de la classe Object.
wait() permet de mettre le Thread en pause en attendant l'appel aux fonctions notify() ou notifyAll(), tandis que ces deux dernières réveillent les Threads en pause.
J'ai donc créé une classe héritant de Thread que j'instancie et que je lance dans mon JPanel.
Mais le résultat n'est toujours pas celui que je veux.
On dirait qu'au lieu de se mettre en pause, le Thread met en pause le JPanel.
Voici le code de ma classe Thread:
public class Descente extends Thread {
private Terrain terrain;
private int delai;
private boolean pause=false;
public Descente(Terrain nvTer, int nvDelai){
this.terrain=nvTer;
this.delai=nvDelai;
}
public synchronized void pause(){
if(!pause){
this.pause=true;
try {
System.out.println("Je m'endors :"+delai);
System.out.println(this);
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void reveil(){
System.out.println("Je réveille les autres :"+delai);
this.notifyAll();
}
public void run() {
while(true){
try {
System.out.println("J'attends "+delai+" ms || pause :"+pause+" || etat :"+this.getState());
Thread.sleep(delai);
} catch (InterruptedException e) {
e.printStackTrace();
}
terrain.descendre();
}
}
public String toString(){
return "Descente : vitesse="+delai;
}
}
C'est la première fois que je suis autant bloqué en programmation. J'ai cherché longuement ce matin mais aucun topic ne semble être apparenté à mon problème.
Je vous remercie d'avance pour l'aide que vous pourrez m'apporter.
Trouvez des réponses à vos questions sur les langages, les frameworks et les astuces de codage. Échangez avec d'autres développeurs passionnés pour améliorer vos compétences en programmation et rester au fait des dernières tendances du secteur.