IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Problème avec les threads


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Italie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Points : 18
    Points
    18
    Par défaut Problème avec les threads
    Dans le cadre d'un projet pour la fac, je suis en train de réaliser un petit jeu. Celui-ci consiste à bouger un personnage avec le clavier afin qu'il attrape ou évite des objets qui lui tombe dessus. Pour faire "tomber" les objets j'utilise des threads qui sont eux-même utilisés dans un thread qui cré de nouveaux objets régulièrement. Jusque là tout va bien!
    A la compilation, aucun problème, mais au lancement, les objets tombent bien régulièrement mais je n'arrive pas à bouger mon personnage avec le clavier dans un premier temps. Il faut que j'aille sur une autre fenetre et que je revienne sur celle de mon jeu pour que le personnage réagisse finalement au clavier...quel est le problème? Je vous laisse mon code(un peu brouillon, )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    public class MainPane implements KeyListener{
    /...je ne poste pas le code qui definit le paneau principal(un peu trop long), et ajoute un bouton start qui lance cominciaPartita().../
    public synchronized void cominciaPartita(){
    		changeBandiere();
    		Runnable r = new PartitaRunnable(this, mainPane,datiGiocatori.get(0), datiGiocatorePanels.get(0));
    		Thread t = new Thread(r);
    		t.start();
    	}
    	public void addMoneta(){
    		Moneta moneta = new Moneta();
    		int i =0;
    		for (WorldPanel wp : worldPanels){
    			wp.addMoneta(moneta);
    			Runnable r = new MonetaRunnable(moneta,wp,personnagio,datiGiocatorePanels.get(i), datiGiocatori.get(i));
    			Thread t = new Thread(r);
    			t.start();
    			i++;
    		}
    	}
    	public void addBomba(){
    		Bomba bomba = new Bomba();
    		int i =0;
    		for (WorldPanel wp : worldPanels){
    			wp.addBomba(bomba);
     
    			Runnable r = new BombaRunnable(bomba,wp,personnagio,datiGiocatorePanels.get(i), datiGiocatori.get(i));
    			Thread t = new Thread(r);
    			t.start();
    			i++;
    		}
    	}
    	public void changeBandiere(){
    		ListeDrapeaux liste = new ListeDrapeaux();
    		Runnable r = new ListeDrapeauRunnable(liste,datiGiocatori.get(0));
    		Thread t = new Thread(r);
    		t.start();
    		for (PanelBandiere pb : panelBandieres){
    			pb.add(liste);	
    			Runnable r2 = new DrapeauRunnable( pb,datiGiocatori.get(0));
    			Thread t2 = new Thread(r2);
    			t2.start();
    		}
    	}
    	public void keyPressed(KeyEvent e) {
    		int code = e.getKeyCode();
    		int codeSinistra = 37;
    		int codeDestra =39;
    		WorldPanel giocatorePrincipalePanel = worldPanels.get(0);
    		if (code == codeSinistra) {
    			personnagio.moveVersoSinistra();
    			giocatorePrincipalePanel.repaint();
    		} else if (code == codeDestra) {
    			personnagio.moveVersoDestra();
    			giocatorePrincipalePanel.repaint();
    		}
    	}
    	public  void keyReleased(KeyEvent e){
    	}
    	public  void keyTyped(KeyEvent e){
    	}
    }
    merci de vos réponses

  2. #2
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 96
    Points : 85
    Points
    85
    Par défaut
    Je crois que c'est un problème de focus.

    Démarre ton programme, et clique dans le centre de la fenêtre. Essaie de bouger.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Italie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Simonake Voir le message
    Je crois que c'est un problème de focus.

    Démarre ton programme, et clique dans le centre de la fenêtre. Essaie de bouger.
    j'ai essayé mais ça ne marche pas ..
    autre chose que j'ai oublié de préciser: vu que je n'ai pas encore bloqué cette action, mon bonhomme réussit à réagir au clavier avant que je n'appuie sur le bouton start

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Italie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    et maintenant que je m'en souviens, j'ai ajouter ceci dans ma classe qui lance le jeu(celle qui contient le main() ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public class Esecuzione {
    	public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    createAndShowGUI();
                }
            });
        }
        
        private static void createAndShowGUI() {
            System.out.println("Created GUI on EDT? "+
                    SwingUtilities.isEventDispatchThread());
            	final GiocoFrame finestra = new GiocoFrame();
            	finestra.setVisible(true);
            	finestra.addWindowListener(new WindowAdapter(){
    		   public void windowActivated(WindowEvent e) { 		       
    		      finestra.requestFocus();	
    		     }
    		});
    
        }
    }

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Italie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2010
    Messages : 21
    Points : 18
    Points
    18
    Par défaut
    personne n'aurait une ptite idée? Je rame vraiment... Je me doute que c'est un problème de synchronisation mais comme l'évènement à gérer (le déplacement du personnage par le clavier) n'est pas un thread je ne sais pas comment intervenir..

Discussions similaires

  1. Problème avec les thread
    Par _SamSoft_ dans le forum Réseau
    Réponses: 21
    Dernier message: 28/10/2007, 15h21
  2. problèmes avec les threads
    Par lukbutor dans le forum C
    Réponses: 7
    Dernier message: 03/05/2007, 00h15
  3. Problèmes avec les thread et les pointeurs
    Par raspac dans le forum POSIX
    Réponses: 2
    Dernier message: 22/10/2006, 17h35
  4. [BOOST] Problème avec les threads
    Par SOAD08 dans le forum Dev-C++
    Réponses: 7
    Dernier message: 08/10/2006, 10h23
  5. Réponses: 5
    Dernier message: 10/05/2005, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo