CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Probleme de boucle

march99
march99
Niveau 10
19 juin 2008 à 22:34:03

Bonjour,
J'ai un petit ( gros ) problème en java(section interface graphique ) : j'appelle une methodes qui creer un KeyListener puis fait une boucle tant qu'une condition n'est pas remplie , le problème et que cette boucle fait planter le programme . Je vous montre un petit bout de code:

public void lancerPartie(){
this.removeAll();
jeux_lancer=true;
this.setFocusable(true);
this.requestFocus();
KeyListener k1 = new KeyListener(){
public void keyReleased (KeyEvent e){
}
public void keyTyped(KeyEvent e){
}
public void keyPressed(KeyEvent e){
System.out.println("Coucou");
switch(e.getKeyChar()){
case haut_j1 :
last_j1=haut_j1;
break;
case bas_j1 :
last_j1=bas_j1;
break;
case droite_j1 :
last_j1=droite_j1;
break;
case gauche_j1 :
last_j1=gauche_j1;
break;
case haut_j2 :
last_j2=haut_j2;
break;
case bas_j2 :
last_j2=bas_j2;
break;
case droite_j2 :
last_j2=droite_j2;
break;
case gauche_j2 :
last_j2=gauche_j2;
break;

}
}
};
Partie.this.addKeyListener(k1);
repaint();
while (fin_jeux == false){
if(nb_joueur==1){
j1.avancerPoints(last_j1);
fin_jeux=j1.testPoints(null);

}
}
Partie.this.removeKeyListener(k1);
}

caelacanthe
caelacanthe
Niveau 10
19 juin 2008 à 22:42:41

postes le plutôt sur http://rafb.net/paste , là on voit rien sans indendations :peur:

march99
march99
Niveau 10
19 juin 2008 à 22:47:13

http://rafb.net/p/XxseIw89.html

Merci je ne connaissais pas se site

EmeraldWeapon
EmeraldWeapon
Niveau 10
19 juin 2008 à 23:10:25

La boucle s'execute while dans un thread séparé au thread principal (qui lance main() )?
Si ce n'est pas le ca sle problème peut venir de là.

EmeraldWeapon
EmeraldWeapon
Niveau 10
19 juin 2008 à 23:12:58

petite précision : en effet si tu effectues tout dans le même thread (le principal), ton programme va être bloqué sur le while et tu ne pourras rien faire.

march99
march99
Niveau 10
20 juin 2008 à 00:54:06

En faite mon programme est comme cela (abrege) :

public classs A extends JPanel {

public void lancerPartie(){
Fonction d'avant
}
public void main ( String[] args){
A coucou = new A();
}
}
Donc apparemment j'ai pas bon ?

Ps : la fonction lancerPartie n'est pas lance a partir du main mais a partir d'un evenement concernant un JButton de la class principale A

EmeraldWeapon
EmeraldWeapon
Niveau 10
20 juin 2008 à 07:50:27

Je pense que ça fige ton interface et que tout plante, tu devrais te renseigner sur l'Event Dispatching Thread (EDT) et les thread en général et leur utilité.
L'idée général c'est qu'il existe trois thread principaux quand tu lances une application munie d'une interface graphique :
-le thread principal qui exécute la méthode main ;
-l'EventDispatchThread dans lequel DOIT se dérouler tout ce qui touche à l'interface graphique.
- le thread qui gère la mémoire (garbage collector, on a pas a se soucier de ça).

Le fait est qu'un programme qui s'execute se fait sequentiellement donc quand tu arrives à ton while le programme boucle dedans, je ne sais pas ce que tu attends dans le while (un input clavier ?) mais t'as l'air de vouloir faire un jeu ou quelque chose du genre et dès lors on a besoin de threads pour gérer plusieurs choses à la fois, tout faire dans le thread main ne suffit pas. des thread en plus de ceux qui existe déjà pour ne pas bloquer le thread main

Si tu peux met ton code des classes en entier sur http://rafb.net/paste ou fait une archive et met le quelque part; que je puisse tester et debugger.

EmeraldWeapon
EmeraldWeapon
Niveau 10
20 juin 2008 à 07:52:38

Je demande ton code desfois que je me trompe et que ça vienne d'ailleurs, en attendant que quelqu'un d'autre se penche sur le sujet.

march99
march99
Niveau 10
20 juin 2008 à 20:04:59

J'ai reussis c'est bon :) ( Oui je fait bien un jeux pour m'entrainer avec le java ) j'ai enlever la boucle de la fonction et je l'ai mis dans le main pis sa marche ^^ Merci de votre aide

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment