[Java] Probleme de freeze

Nieli Messages postés 85 Statut Membre -  
 Nieli -
Bonjour,
Voila mon problème,
J'ai une JFrame contenant mon jeu (jeu de go ndlr) avec une JMenuBar je propose le lancement d'un Tchat,
Le principe est que je "try" une connexion à un serveur, si ca génere une IOException, alors avec une JOptionPane, on demande à l'utilisateur si il veut lancer le serveur. (Désolé si cette méthode est dégueulasse).

Le problème est que si je place un main() dans la classe Tchat et que je la lance à part, le serveur.accept() tourne en "background" laissant libre court à toute opération (sur la fenetre de tchat)
Alors que si je lance la fenetre de tchat depuis l'ActionListener de JMenuBar lors du serveur.accept() la fenetre de tchat et la fenetre du Go freeze.
SwingUtilities.invokeLater(new Runnable(){
public void run(){
//On crée une nouvelle instance de notre fenêtre
tchat = new Tchat("127.0.0.1");
}
});

Je voudrais votre avis.

Merci d'avance
Configuration: Windows XP
Firefox 2.0.0.5

3 réponses

  1. kij_82 Messages postés 4102 Date d'inscription   Statut Contributeur Dernière intervention   857
     
    Tu as une classe principale qui lance tes deux instances ? (le go et le chat)

    Si Non, je te conseille de faire comme ca.
    Si oui, alors tu pourrais mettre en avant plan la fenetre concernée (ici celle du go) avec le déclenchement de la méthode adéquat de cette instance qui ouvre la pop-up de confirmation de connexion.

    Qu'en pense tu ?
    0
  2. Nieli Messages postés 85 Statut Membre 6
     
    D'abord Merci de ta réponse.

    Ma classe principale lance seulement la fenetre du Go
    public static void main(String[] args){
    SwingUtilities.invokeLater(new Runnable(){
    public void run(){
    //On crée une nouvelle instance de notre fenêtre
    FenetreGo fenetre = new FenetreGo();
    fenetre.setVisible(true);
    }
    });

    La fenetre de Tchat elle est instanciée par la gestion des evenements
    public class Evenement implements ActionListener,MouseListener {
    if(source.getText()=="Ouvrir")
    {
    SwingUtilities.invokeLater(new Runnable(){
    public void run(){
    //On crée une nouvelle instance de notre fenêtre
    tchat = new Tchat("127.0.0.1");
    }
    });
    }
    }

    Je vais essayer de réfléchir à implanter ta méthode d'autre part, mais je doute que l'utilsateur accepte d'avoir une fenetre de tchat qui freeze :s

    Merci d'avance.
    0