Socket bloquant les mises à jour graphiques

Résolu/Fermé
TheKill_TnT Messages postés 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 - Modifié le 11 févr. 2019 à 16:30
TheKill_TnT Messages postés 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 - 1 mai 2019 à 14:50
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 !
A voir également:

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 févr. 2019 à 18:28
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
0
TheKill_TnT Messages postés 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 32
13 févr. 2019 à 09:03
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.
0
TheKill_TnT Messages postés 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 32
26 avril 2019 à 06:58
En fait le problème devient double, j'ai remarqué que le Thread se lançait et qu'à la fin du Thread les composents de la fenêtre était ajoutés (mais ils sont init avant)
SI quelqu'un a une idée je suis preneur.
0
TheKill_TnT Messages postés 148 Date d'inscription lundi 15 mai 2017 Statut Membre Dernière intervention 22 juin 2019 32
1 mai 2019 à 14:50
Bon, j'ai trouvé une alternative car après la connexion le souci se résous de lui-même. C'est pas réellement
résolu mais bon.
0