Comment résoudre le problème d'une boucle infinie??

Résolu
haythemrafa Messages postés 7 Date d'inscription mercredi 25 avril 2012 Statut Membre Dernière intervention 11 mai 2012 - 10 mai 2012 à 18:52
haythemrafa Messages postés 7 Date d'inscription mercredi 25 avril 2012 Statut Membre Dernière intervention 11 mai 2012 - 11 mai 2012 à 15:17
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

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
11 mai 2012 à 08:09
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...
3
haythemrafa Messages postés 7 Date d'inscription mercredi 25 avril 2012 Statut Membre Dernière intervention 11 mai 2012
11 mai 2012 à 15:17
Merci
J'ai fait comme tu as dit et ça a marché ;)
0
Rejoignez-nous