J'ai une question de client/serveur que j'essaye de trouver la meilleure solution pour. Si un client se déconnecte du serveur, pour quelque raison que ce soit, je voudrais que le thread de sortie d'entrée signale au thread gui que quelque chose s'est mal passé et que le thread gui imprime une erreur et gère il (probablement revenir à l'interface de connexion). Après la création du thread graphique initial, le client peut changer de guis, en fonction de ce qu'il fait, donc je pense que j'ai besoin d'un moyen de voir dynamiquement ce que gui est en cours d'exécution.Fil d'IU fil d'IU d'alerte si l'erreur se produit
La façon dont je pensais à le faire jusqu'à présent:
1) Créer un objet qui crée et montre tous les IUG. Donc, au lieu d'appeler invokeLater ... SomeGui.CreateAndShoGui() ... nous aurions cet objet responsable de faire cela, c'est-à-dire GuiObject.showSomeGui();
2) Demander à chaque interface graphique de mettre en œuvre une interface, ce qui assurera qu'il existe une méthode qui, une fois appelée, arrêtera gracieusement cette interface lorsque nous aurons perdu la connexion au serveur.
3) Avoir un thread qui surveille le thread IO et l'objet GUI. Si quelque chose se passe mal sur le thread IO, le thread IO se fermera et avisera le thread de surveillance que nous avons perdu la connexion au serveur. Le thread de surveillance pourrait alors alerter tout guis ouvert (de l'objet gui) que nous avons perdu la connexion et qu'il doit fermer.
Je viens juste de commencer à réfléchir à cela, et jusqu'à présent, c'est la meilleure solution que j'ai trouvée. Est-ce que cela semble être une solution raisonnable qui ne va pas ajouter trop de complexité au code? Ou quelqu'un peut-il recommander une solution qui serait plus simple pour les personnes lisant le code à comprendre?
Merci
EDIT: L'autre option que je suis en train de jouer avec un objet est d'avoir sur le thread IO, qui obtient également transmis à chaque nouvelle IUG comme il est ouvert. Cet objet donnera la référence guis actuellement ouverte au thread io, de sorte que le thread io peut l'alerter si quelque chose ne va pas. Je penche cependant contre cette solution, car il semblerait que ce serait plus facile à lire si vous aviez un objet dédié pour que cela fonctionne (comme la solution ci-dessus), au lieu de passer un objet obscur à chaque gui.
Ma question suivante est, si chaque interface implémentait une interface, comment le thread d'E/S sait-il sur quoi appeler la méthode closeGui? N'importe quel nombre de guis différents pourrait être en hausse, et si je ne me trompe pas le thread IO devrait avoir une référence à l'actuel gui afin d'appeler cette méthode? Ou y a-t-il quelque chose qui me manque ici? – vimalloc
Voir les informations après la modification de la réponse. – rancidfishbreath