Problème d'ouverture de la seconde fenetre graphique

Résolu
cs_Flyeur Messages postés 8 Date d'inscription samedi 31 août 2002 Statut Membre Dernière intervention 24 novembre 2011 - 24 nov. 2011 à 09:47
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 24 nov. 2011 à 13:28
Bonjonr,

je suis actuellement entrain de me remettre à la programmation et plus précisement le java, j'ai donc commencé un nouveau projet à savoir un petit client telnet.

Celui ci se compose de 2 fenetres, 1 pour la gestion des connections (et plus tard des config), l'autre une console pour emettre et recevoir des messages sur un serveur. Chacune des fenetres fonctionne parfaitement si elle sont lancé séparément, en revanche si je lance le programme normalement, à savoir la fenetre de connection qui fait appel à la console la ça coince !

liste des problemes :

le bouton connection reste enclenché sur la premiere fenetre
la deuxieme fenetre s'initialise uniquement avec la taille et le titre défini
je perd tout controle sur chacune des fenetres


si quelqu'un à une idée du problème ?
Merci d'avance pour l'aide.

5 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
24 nov. 2011 à 11:50
Le soucis vient certainement des Thread, à un moment, dans tes consoles, tu dois avoir un while(true){faire un truc} pour intercepter les commandes. Et c'est là que ca bloque si tu n'utilises qu'un thread.

Un petit exemple :

public class Console1 extends Thread {

@Override
public void run(){
while(true){
System.out.println("console1");
}
}

}

public class Console2 extends Thread {

@Override
public void run(){
new Console1().run();
//new Console1().start();
while(true){
System.out.println("console2");
}
}

}


et dans une main :

new Console2().run();

et là, tu vas voir, tu n'auras que des console1 qui vont s'afficher.
Alors que si tu remplaces le new Console1().run(); par new Console1().start(), console1 et console2 vont s'afficher
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
24 nov. 2011 à 10:28
Bonjour,

"le bouton connection reste enclenché" Est ce que c'est un JToogleButton ? Si non, c'est que tu as ouvers une nouvelle fenêtre dans le Thread courant.

Je dirais que le problème que tu as est une mauvaise gestion des Threads. Sais tu ce que c'est ? Ouvres tu de nouveaux threads avec la méthode start ?
0
cs_Flyeur Messages postés 8 Date d'inscription samedi 31 août 2002 Statut Membre Dernière intervention 24 novembre 2011
24 nov. 2011 à 11:18
Salut,

non le bouton est un simple Jbuton, je pense donc que c'est un problème de thread, en effet je ne sais pas exactement a quoi correspond un threads.

par contre j'ai essayé de lancé la deuxieme fenetre comme un nouvel objet, de façon à eviter d'utiliser les memes ressources, mais il semblerait que ce ne soit pas le cas.

je vais essayer de me renseigner sur les thread merci pour la piste :)
0
cs_Flyeur Messages postés 8 Date d'inscription samedi 31 août 2002 Statut Membre Dernière intervention 24 novembre 2011
24 nov. 2011 à 12:07
Merci je vois à peu pres le truc tu lance la console2 par sa methode qui elle lancera la console1 avec le start (certainement une méthode hérité du thread), je vois bien le principe je vais continuer à étudier ça, de façon à pouvoir l'implémenter correctement dans mon code.

Mais la solution correspond parfaitement au type de problème que c'etait :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
24 nov. 2011 à 13:28
Oui, c'est ca, la méthode start est une méthode hérité de Thread et appelle la méthode run() dans un nouveau thread. (Un thread est à peu près équivalent à un processus sauf que deux threads partagent le même espace d'adressage)

Si tu appelles la méthode run(), tu restes dans le thread courant donc tant que ta boucle while n'est pas terminée, tu n'effectue pas le reste du code.
0
Rejoignez-nous