2010-04-23 14 views
0

J'ai écrit un jeu de connexion autonome 4.Java Communication entre les classes et JFrame JDialog

Ensuite, je voudrais être en mesure de jouer sur le réseau et aussi avoir une fonction de chat.

connecter 4 GUI (JFrame) détient -> connecter modèle 4 jeu

je voudrais mettre en œuvre connecter 4 GUI réseau (JDialog) (ici l'utilisateur peut choisir d'agir en tant que serveur ou client) qui détient réseau API (Serveur ne servant qu'une seule connexion)

et enfin une interface graphique de chat (JDialog) pour échanger des messages.

ma question est comment puis-je mettre en œuvre la communication inter classe/GUI? Lorsqu'un message réseau est reçu, il doit être envoyé au bon destinataire (jeu/chat), ainsi que les messages envoyés depuis le chat/jeu transmis à la machine distante. J'ai regardé dans les classes internes mais on m'a dit que c'est une mauvaise idée d'implémenter autant en classe unique et je n'aimais pas beaucoup cette idée non plus. J'ai écrit un autre jeu naval en C# et utilise des délégués pour accomplir cette tâche mais malheureusement je suis informé que les délégués ne sont pas disponibles en Java.

im un débutant et en ce moment explorer des options donc im ouvrir à vos conseils.

merci.

+0

Je suis peut-être sous-estimé ici: Savez-vous comment appeler directement les méthodes de votre image principale en donnant une référence à votre dialogue de discussion? – Gunslinger47

+0

oui je suis conscient de cela. Je cherche plus d'options. – iTEgg

Répondre

1

Il y a deux problèmes ici. Tout d'abord, vous devez vous rappeler que toute l'opération de l'interface graphique doit être émise à partir de l'EDT (Swing's Event Dispatching Thread). Donc, si un autre thread (comme le fil en écoutant les messages du réseau) souhaitez mettre à jour l'interface graphique, il doit utiliser SwingUtilities.invokeLater comme suit:

// Network thread 
final Message msg = getMessage(); 
SwingUtilities.invokeLater(new Runnable() { 
    public void run() { 
     // This code will be executed on the EDT 
     // it can access the msg variable because it is final 
    } 
}); 

Le deuxième point est celui de la coordination des objets de l'interface graphique et les objets en réseau. Je pense que la meilleure approche consiste à créer deux classes Mediator qui recevront des notifications de l'objet réseau et les "traduiront" en action appropriée sur l'objet GUI (et vice versa). Ces médiateurs s'assurent également que les événements GUI sont distribués sur l'EDT, comme expliqué ci-dessus.

+0

Ceci est une façon super ingénieuse de mettre en œuvre ce que je voudrais! Il montre l'intégrité dans le code sans passer des objets entiers autour. Très propre! Merci beaucoup d'avoir présenté cette idée. – iTEgg