2010-10-18 6 views
0

Je suis en train d'écrire un programme de discussion RMI. Dans mon programme, je peux recevoir et envoyer des messages, mais je ne suis pas capable de l'afficher dans TextArea. Je ne suis pas sûr de savoir quelle est l'erreur. J'ai essayé d'utiliser la méthode Event Dispatch également. Cela n'aide pas.Problème lors de la mise à jour de jTextArea

public class client extends javax.swing.JFrame implements inter { 

public client() { 
    initComponents(); 
} 


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    try { 
     final inter i = (inter) Naming.lookup("rmi://localhost:1111/client1"); 
     final String msg = jTextField1.getText(); 
     if (msg.length() > 0) { 
      jTextArea1.append("Me :" + msg); 
      java.awt.EventQueue.invokeLater(new Runnable() { 

       public void run() { 
        try { 
         i.rcvMsg("Client 1 : " + msg); 
        } catch (RemoteException ex) { 
        } 
       } 
      }); 


     } 
    } catch (RemoteException ex) { 
    } catch (NotBoundException ex) { 
    } catch (MalformedURLException ex) { 
    } 
}           

public void rcvMsg(String msg) { 
    final String s = msg; 
    java.awt.EventQueue.invokeLater(new Runnable() { 

     public void run() { 
      System.out.println("server called"); 
      System.out.println(s); 
      jTextArea1.append(s); 
      System.out.println("client msg" + java.awt.EventQueue.isDispatchThread()); 
      jTextArea1.update(jTextArea1.getGraphics()); 
     } 
    }); 
} 

public static void main(String args[]) { 
    try { 
     java.awt.EventQueue.invokeLater(new Runnable() { 

      public void run() { 
       new client().setVisible(true); 
      } 
     }); 
     client c2 = new client(); 
     inter stub = (inter) UnicastRemoteObject.exportObject(c2, 0); 
     Registry registry = LocateRegistry.createRegistry(1113); 
     registry.bind("client2", stub); 
    } catch (AlreadyBoundException ex) { 
    } catch (AccessException ex) { 
    } catch (RemoteException ex) { 
    } 
} 
} 

S'il vous plaît aider ...

+0

peut-être vos déclarations catch cachés cachent des informations? –

+0

non ... je viens de supprimer le code dans ter pour poster tem dans stackoverflow .. – rgksugan

Répondre

1

partager quelques-unes des informations en utilisant getGraphics() n'est pas apprécié et peut causer des problèmes,

jTextArea1.update (jTextArea1.getGraphics());

et j'ai aussi créé l'application conversation avec RMI:

Pass by reference problem in RMI? il y a aussi client écrit là-bas, peut-être serait utile pour vous.

0

Dans main après la création c2, appelez c2.setVisible(true);

Le code rcvMsg est appelé sur le c2 instance de client. Puisque l'instance c2 n'est jamais rendue visible, vous ne voyez aucun changement.

Vous voulez probablement qu'un client se connecte à un serveur, pas directement à un autre client. Le client à client fonctionnera pour 2 points de terminaison. Mais que se passe-t-il si vous voulez en ajouter un troisième? Un quatrième? Vous voulez vraiment un server qui agira comme un intermédiaire pour tous les clients.

Questions connexes