JavaRMI
liooo
Messages postés
1
Statut
Membre
-
kij_82 Messages postés 4260 Statut Contributeur -
kij_82 Messages postés 4260 Statut Contributeur -
Bonjour,
je dois realiser un programme de chat basé sur rmi et voila donc j'ai tout bon sauf au niveau de la methode du serveur envoyer un message je dois envoyer a tt les clients connecté ..
donc voila
voila le code mais le probleme c'est que le parcour de hashmap n'est pas effectué errueur a it.next().diffuseMessage(msg);
diffuse message est une methode pour la classe client ......
merci
je dois realiser un programme de chat basé sur rmi et voila donc j'ai tout bon sauf au niveau de la methode du serveur envoyer un message je dois envoyer a tt les clients connecté ..
donc voila
private static final long serialVersionUID = 1L;
private InterfaceChatClient client;
private GregorianCalendar _gcal = new GregorianCalendar();
private HashMap clients;
public ChatServeur() throws RemoteException
{
super();
// Initialisation de la table de hashage.
clients = new HashMap();
}
public void connect(String pseudo, String url) throws RemoteException {
InterfaceChatClient client = null;
client = (InterfaceChatClient) Naming.lookup(url);
}
catch(MalformedURLException e)
{
e.printStackTrace();
}
catch(RemoteException e)
{
e.printStackTrace();
}
catch(NotBoundException e)
{
e.printStackTrace();
}
synchronized(clients)
{
// Ajoute l le client distant et le nom de l'utilisateur.
clients.put(client,pseudo);
System.out.println(clients.size());
System.out.println (pseudo +" est connecté");
}
}
public void broadcastMessage(Message msg) throws RemoteException
{
Iterator <InterfaceChatClient> it = clients.values().iterator();
while(it.hasNext())
{
it.next().diffuseMessage(msg);
}
}
}
voila le code mais le probleme c'est que le parcour de hashmap n'est pas effectué errueur a it.next().diffuseMessage(msg);
diffuse message est une methode pour la classe client ......
merci
1 réponse
Quand tu fais :
Il se semble que même lorsqu'une liste est vide, si tu utilise un curseur de parcours comme c'est le cas ici, tu as effectivement un passage dans (it.hasnext) pour aller à la fin de cette liste. Or dans ta boucle, tu fais appel à la méthode diffuseMessage directement sur l'objet que tu récupère sans avoir testé sa validité.
Je te conseile donc de mettre un test avant de lancer ta méthode, de cette facon :
Ca c'est une remarque au cas ou l'erreur soit de type NullPointerException.
Pour pouvoir te répondre plus précisément il serait bon que tu nous mette l'erreur en question, ainsi que le reste de ton code (car j'imagine qu'il n'y a pas que ca).
while(it.hasNext())
{
it.next().diffuseMessage(msg);
}
Il se semble que même lorsqu'une liste est vide, si tu utilise un curseur de parcours comme c'est le cas ici, tu as effectivement un passage dans (it.hasnext) pour aller à la fin de cette liste. Or dans ta boucle, tu fais appel à la méthode diffuseMessage directement sur l'objet que tu récupère sans avoir testé sa validité.
Je te conseile donc de mettre un test avant de lancer ta méthode, de cette facon :
Client myClient = null;
while(it.hasNext())
{
myClient = (Client) it.next();
if ( myClient != null )
myClient.diffuseMessage(msg);
}
Ca c'est une remarque au cas ou l'erreur soit de type NullPointerException.
Pour pouvoir te répondre plus précisément il serait bon que tu nous mette l'erreur en question, ainsi que le reste de ton code (car j'imagine qu'il n'y a pas que ca).