Problème d'ouverture de la seconde fenetre graphique [Résolu]

Messages postés
8
Date d'inscription
samedi 31 août 2002
Statut
Membre
Dernière intervention
24 novembre 2011
- - Dernière réponse : cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
- 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.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Julien39
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
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 ?
Commenter la réponse de cs_Julien39
Messages postés
8
Date d'inscription
samedi 31 août 2002
Statut
Membre
Dernière intervention
24 novembre 2011
0
Merci
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 :)
Commenter la réponse de cs_Flyeur
Messages postés
8
Date d'inscription
samedi 31 août 2002
Statut
Membre
Dernière intervention
24 novembre 2011
0
Merci
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 :)
Commenter la réponse de cs_Flyeur
Messages postés
6413
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
17 mai 2018
246
0
Merci
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.
Commenter la réponse de cs_Julien39