Bonjour à tous,
Je publie aujourd'hui sur ce site car j'ai grand besoin de votre aide pour un problème plutôt bizarre.. Je m'explique:
Dans le cadre de la création de mon programme de tchat, mon support de travail est une JFrame qui contient un JPanel qui contient un JButton. Je souhaite mettre à jour les dimensions cette la frame en appuyant sur le bouton. Pour éviter que la scrutation de l'appui sur le bouton par un écouteur exterieurs ne bloque le programme, j'ai choisi de passer un Thread donc voici la fonction "run()":
Mais un problème un peu bizarre intervient. Ce thread se lance correctement mais il ne parvient pas à passer la condition IF qui du coup bloque le déroulement de la fonction...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public void run() { // TODO Auto-generated method stub boolean threadFinished = false; try { while(!threadFinished){ if(this.panelConnection.connectionAsked){ this.setBounds(450, 50, 460, 650); threadFinished = true; } } } catch (Exception e) { Server.msgWindowServer.setMsgWindowServer("ERREUR: Problème d'affichage + e"); System.err.println("Erreur affichage"); } }
J'ai donc lancé le programme en mode Debbug et quand je fais dérouler le programme pas à pas, le IF est passé correctement et la fenêtre se redimensionne comme je le veux.
J'ai réalisé un second test avec des println(), et la aussi le programme fonctionne correctement...
on voit le code se lancer et le message "attente..." s'écrire indéfiniment jusqu’à l'appui sur le bouton. Puis la fenêtre se redimensionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 while(!threadFinished){ System.out.println("attente..."); if(this.panelConnection.connectionAsked){ this.setBounds(450, 50, 460, 650); threadFinished = true; } }
Mais quand je lance le programme normalement sans test.. ca ne fonctionne pas..
C'est vraiment bizarre! est ce que quelqu'un aurait une explication s'il vous plait????
PS: le passage par la variable "connectionAsked" plutôt que par un ActionListener peut paraître inadapté mais est nécessaire.
Partager