Java.long.nullPointerException

Résolu
marybele86 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
marybele86 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    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
    1. marybele86 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci Xavier. J'ai essayé avec ta méthode et ça marche :)
      0
  2. tarek_dotzero Messages postés 834 Statut Membre 122
     
    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
  3. tarek_dotzero Messages postés 834 Statut Membre 122
     
    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
    1. marybele86 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
       
      Mercii Infiniment pour ton aide. C'est Bon mon application marche :)
      0
  4. marybele86 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
     
    Merci Pour votre aide :)
    0