Comment résoudre le problème d'une boucle infinie?? [Résolu]

Signaler
Messages postés
7
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
11 mai 2012
-
Messages postés
7
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
11 mai 2012
-
Salut ,


J'ai une interface d'accueil dans laquelle quand on clique sur un menuItem on fait apparaître une nouvelle JFrame qui va jouer le rôle d'un serveur

alors le code dans actionPerformed

JMenuItem mntmGrer_1 = new JMenuItem("G\u00E9rer");
mntmGrer_1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
Ensachage frame = new Ensachage();
frame.setVisible(true);
frame.traitement();

}
});

le code de la méthode traitement

public void traitement(){
try {

ServerSocket ss = new ServerSocket(1200);

while(true){

Socket sc = ss.accept();
MonThread th = new MonThread(sc,list,lblLiv,lblLiv2,lblLiv3,lblLiv4,lblLiv5,lblP,lblP2,lblP3,lblP4,lblP5,lblSL,lblSL2,lblSL3,lblSL4,lblSL5,v5,v,vNum,md,bAjouter,bAjouter2,bAjouter3,bAjouter4,bAjouter5,ftfSac5,ftfSac4,ftfSac3,ftfSac2,ftfSac,bAnnuler,bAnnuler2,bAnnuler3,bAnnuler4,bAnnuler5);
th.start();

}


} catch (IOException e) {
e.printStackTrace();
}
}

Quand La fenêtre s'ouvre rien n'apparaît et tout se bloque et je ne peux cliquer sur rien (je ne peux l'arrêtrer que depuis eclipse)

Je tiens à dire que quand le code situé dans actionPerformed était dans le main() de la classe ensachage tout fonctionnait correctement !!
mais quand j'ai supprimé le main() et j'ai voulu qu'elle aparaît après appel d'une autre JFrame ça ne marchait pas !!

2 réponses

Messages postés
600
Date d'inscription
samedi 20 mai 2006
Statut
Membre
Dernière intervention
8 juillet 2016
8
normale...

tu lui demande de faire une boucle infinie lors de la construction de ta fenetre...
donc tu cliques sur ton bouton, il commence à construire ta fenetre et donc sa boucle infinie... Il ne sortira jamais de la boucle pour terminer l'actionPerformed...

je te conseillerai si tu veux garder ce system de faire que ta class Ensachage implemente l'interface Runnable.
Ta méthode traitement passe dans la méthode run de l'interface...
et tu fais dans ton actionPerformed:
public void actionPerformed(ActionEvent arg0) {
Ensachage frame = new Ensachage();
frame.setVisible(true);
new Thread(frame).start();


Je n'ai pas testé, mais bon faire une boucle infinie qui lance à chaque fois une thread ne me semble pas une super idée....
mais tu sais mieux que nous ce que tu veux faire...
Messages postés
7
Date d'inscription
mercredi 25 avril 2012
Statut
Membre
Dernière intervention
11 mai 2012

Merci
J'ai fait comme tu as dit et ça a marché ;)