Menu

Socket bloquant les mises à jour graphiques

Messages postés
100
Date d'inscription
lundi 15 mai 2017
Dernière intervention
13 février 2019
-
Bonjour, sur un programme java je me connecte à un serveur et je lui envoie des données, j'en demande...
Mais j'ai un problème: durant la connexion au serveur, la partie graphique est littéralement mise en attente. Même thread, même méthode, même classe...
// Socket connecté...
//Echanges de données...
/*JProgressBar*/ progress.setValue(x); // La valeure ne change pas à l'écran
//Suite...
// Connexion interrompue
// La barre de progression avance comme on lui avait demandé plus tôt

Si quelqu'un sait d'où celà peut provenir et quel moyens employer pour empêcher ça je remercie !
Afficher la suite 

Votre réponse

1 réponse

Messages postés
15940
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 février 2019
3525
0
Merci
Bonjour,

Tu fait ton action au sein d'un ActionListener, MouseListener, ou autre Listener ?
Dans ce cas c'est normal, le programme attends que l'action soit terminé avant d'afficher le résultat.

Il fuadrait plutôt utiliser les SwingWorker :
https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html
TheKill_TnT
Messages postés
100
Date d'inscription
lundi 15 mai 2017
Dernière intervention
13 février 2019
1 -
Le changement ne se fait pas à part...
C'est à dire:
// Initialisation de la scene:
//  quand l'ActionListener "Multijoueur"
//  est actionné, on va dans cette classe
//  qui hérite de GuiMenu, méthode init
//  abstraite, et on lui invoque init()
//  (à cette classe) et elle déssine
//  la fenêtre (progress bar, label)
//  puis on lance un nouveau Thread
//  (new Thread(){...}.start(); qui va
//  tenter une connexion au serveur
//  par Socket et envoyer/recevoir 
//  des données mais tant que le
//  socket est connecté, tout les
//  changements effectués dans
//  le JProgressBar ou le JLabel
//  sont ignorés jusqu'à la déconnexion
//  du socket.


Le code des sockets se trouve donc dans la même méthode, même classe, même thread comme dit plus haut.
Même après tentative de lancement avec SwingWorker, la partie graphique est mise en attente.
Commenter la réponse de KX