[résolu] Petit problème de Thread

Petit problème de Thread [résolu] - Java - Programmation

Marsh Posté le 19-02-2008 à 15:29:49    

Bonjour,
je programme avec des amis un petit jeu en temps réel
pour exposer notre problème voici un résumé simpliste des classes concernées
 
attributs de la classe Menu (extends JPanel) : JButton boutonSoldat, boutonVehicule;
 
méthodes de la classe Formateur :

Citation :

public void entrainerSoldat() {
   menu.boutonSoldat.setText("En formation" );
   try{
     Thread.sleep(500);
   }catch (Exception e){}
   menu.boutonSoldat.setText("Créer Soldat ?" );
}
public void entrainerVehicule(){
   menu.boutonSoldat.setText("En Construction" );
  try{
     Thread.sleep(1000);
   }catch (Exception e){}
   menu.boutonSoldat.setText("Créer véhicule ?" );
}


 
dans le constructeur de la classe Controle (qui a comme attribut un Menu):

Citation :

boutonSoldat.addMouseListener(new MouseAdapter(){
public void MouseReleased(MouseEvent e) {
    formateur.entrainerSoldat();
    joueur.ajouter(new Soldat());
});
boutonChar.addMouseListener(new MouseAdapter(){
public void MouseReleased(MouseEvent e) {
    formateur.entrainerVehicule();
    joueur.ajouter(new Vehicule());
});


 
classe Joueur : liste des soldats et des véhicules
 
vous l'aurez compris, le clic sur l'un des boutons permet de construire un soldat ou un véhicule après un certain temps d'attente. Ceci a pour but d'attendre la fin de la formation d'un soldat avant de l'ajouter au jeu, comme dans tout jeu de stratégie. Cela fonctionne. Problème : pendant cette attente on ne peut pas cliquer sur les autres boutons ! Le bouton Soldat reste enfoncé (car l'attente commence dans la méthode MouseReleased()), le controle est en quelque sorte bloqué par cette attente et n'est plus à l'écoute des autres clics. Il faudrait que le programme se découpe en 2 parties, l'une qui s'occupe des actions à faire après l'attente et l'autre qui reste attentive aux clics de souris. Quelle solution peut on adopter ?
De plus, les setText() sur les boutons n'ont pas d'effet, plus exactement on ne peut pas faire de repaint() sur le menu pendant l'attente.


Message édité par mic-chan le 22-02-2008 à 17:46:14
Reply

Marsh Posté le 19-02-2008 à 15:29:49   

Reply

Marsh Posté le 19-02-2008 à 16:43:49    

et merci a ceux qui voudront bien nous aider  :hello:  

Reply

Marsh Posté le 19-02-2008 à 17:33:22    

Rien d'etonnant, tu met ton thread en sommeil le temps de creer un soldat ou un vehicule. Ce qu'il faut faire est plutot positionner une methode qui se declanchera sur un timer au bout du temps necessaire. Par ex : Timer en java, ex a adapter

Reply

Marsh Posté le 19-02-2008 à 19:50:11    

solution très simple et très efficace, thanks  ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed