Java.long.nullPointerException

Résolu/Fermé
marybele86 Messages postés 9 Date d'inscription vendredi 30 décembre 2011 Statut Membre Dernière intervention 1 mai 2012 - 30 déc. 2011 à 20:32
marybele86 Messages postés 9 Date d'inscription vendredi 30 décembre 2011 Statut Membre Dernière intervention 1 mai 2012 - 30 déc. 2011 à 21:03
Bonjour,
Je suis débutante en JAVA RMI. J'essais de réaliser une application qui consiste à ajouter des abonnés à un répértoire téléphonique. Les programmes se compilent , mais dès que j'essais de lancer mon Client, Je tombe sur cette erreur java.long.nullPointerException. Voici le code Client que j'utilise :

import java.rmi.*;
import java.rmi.server.*;

public class Client_Repertoire {
public static void main(String[] args){
try{

Interface_Repertoire biss=(Interface_Repertoire)Naming.lookup("rmi://127.0.0.1:1099/MY");
Abonne F=new Abonne("mery","0613366401");
String a= biss.addAbonne(f);
System.out.println(a);
}
catch(Exception e){System.out.print(e);
}
}
}

Voici l'implémentation de la méthode addAbonne:

import java.rmi.*;
import java.rmi.server.*;

public class Object_Repertoire extends UnicastRemoteObject implements Interface_Repertoire {

Object_Repertoire()throws RemoteException

{
super();
}

int i=0,nmax=3 ;
Abonne A[]=new Abonne[3];
Abonne B;

// Ajout d'un nouvel abonné

public String addAbonne(Abonne a)throws RemoteException
{
if(i<=nmax)
{
A[i].name=a.name;
A[i].tel=a.tel;
i=i+1;
return "true";
}
else return "false";
}



SVP j'ai besoin de votre aide. C'est urgent


4 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
30 déc. 2011 à 20:38
Bonjour,

Quand tu écris ceci :

A[i].name=a.name;
A[i].tel=a.tel;

A[i] n'a jamais été instancié.
Il faudrait d'abord faire A[i] = new Abonne();

Voire remplacer simplement les deux lignes par
A[i] = new Abonne(a.name, a.tel);

Xavier
0
marybele86 Messages postés 9 Date d'inscription vendredi 30 décembre 2011 Statut Membre Dernière intervention 1 mai 2012
30 déc. 2011 à 21:03
Merci Xavier. J'ai essayé avec ta méthode et ça marche :)
0
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 122
30 déc. 2011 à 20:39
Pour avoir plus d'information il est préférable d'utiliser:
e.printStackTrace();

au lieu de:
System.out.print(e);

Cela vous permettra d'obtenir la ligne exacte qui provoque l'erreur qui est (probablement) un objet non-initialisé.
0
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 122
30 déc. 2011 à 20:42
Bonjour,

Je pense que la méthode suivante contient une erreur d'initialisation:
public String addAbonne(Abonne a)throws RemoteException
{
if(i<=nmax)
{
A[i].name=a.name;
A[i].tel=a.tel;
i=i+1;
return "true";
}
else return "false";
} 

En effet, l'instruction:
Abonne A[]=new Abonne[3];

de déclaration ne crée par trois objets mais un tableau de trois "null" et lorsque vous essayez:
A[i].name=a.name;

l'exception est provoquée parce que A[i] est "null" alors il est impossible de faire null.a = ...


Il faut réinitialiser votre tableau avec trois nouveau Abonne avant de faire les affection ou de le créer sur le champs:
public String addAbonne(Abonne a)throws RemoteException
{
if(i<=nmax)
{
A[i] = new Abonne();
A[i].name=a.name;
A[i].tel=a.tel;
i=i+1;
return "true";
}
else return "false";
} 



Bon Courage.
0
marybele86 Messages postés 9 Date d'inscription vendredi 30 décembre 2011 Statut Membre Dernière intervention 1 mai 2012
30 déc. 2011 à 21:03
Mercii Infiniment pour ton aide. C'est Bon mon application marche :)
0
marybele86 Messages postés 9 Date d'inscription vendredi 30 décembre 2011 Statut Membre Dernière intervention 1 mai 2012
30 déc. 2011 à 21:02
Merci Pour votre aide :)
0