Signaler

Java erreur "java.lang.NullPointer.Exception [Résolu/Fermé]

Posez votre question Makari - Dernière réponse le 23 avril 2008 à 16:05 par manna007
Bonjour,
voila, j'ai fait un programme qui utilise des classes,des objets et tout, je l'enregistre ds un fichier .dat, je ferme le prog, je le reouvre, je charge l'enregistrement (jusque la tout va bien) mais qd je fais appel a une methode d'un objet du tableau d'objet d'enregistrement ca plante avec l'erreur :java.lang.NullPointer.Exception

Je suis debutant et j'ai du mal a tout comprendre, si quelqu'un pouvait me mettre sur la voie ca serait sympa ^^.

(je sais pas si ca peut aider mais voila comment marche en gros mon prog :

-il cré un obj "assoc" qui est structuré par des variables et un tableau d'objets de type "membre", un objet de type membre est composé de variables et de tableaux d'objets "achat" et "credit" qui st eux memes composés de variables simples
-il y'a plein de methodes pour afficher, modifier etc les differentes données

et ca plante lorsque j'utilise une methode de la classe membre.
sinon je voulai preciser que tant que je ne sauvegarde pas, tout marche, c'est seulement quand je recharge le fichier que les methodes plantent.
Je sais pas si c'est clair, j'ai essayé d'expliquer au mieux, merci de votre aide)
Utile
+19
plus moins
salut

"null pointer exception" veut dire qu'un de tes objets n'est pas instancié..

soit à cause d'un mauvais constructeur, soit que tu as oublié de l'appeler


Cette réponse vous a-t-elle aidé ?  
Utile
+9
plus moins
Bonjour à tous ,
je dev un programme qui sert à faire un transfer d'appel en utilisant JTAPI mais quand je compile il me renvoie java.lang.NullPointer.Exception alors là je ne sais comment le corriger
voilà mon code :
import java.io.IOException;
import javax.telephony.*;
import javax.telephony.events.*;
import javax.telephony.callcontrol.*;
import javax.telephony.callcontrol.events.*;
public class TransferAppl {
public static void main(String[] args){
JtapiPeer peer = null;
Provider prov = null;
CallControlCall call = null;
CallControlCall call2 = null;
Terminal term = null;
TerminalConnection[] tcs = null;
Connection[] cons = null;
try {
peer = JtapiPeerFactory.getJtapiPeer(null);
prov = peer.getProvider(("com.headissue.asterisk.jtapi.gjtapi.AsteriskProvider;Server=X.X.X.X;Port=5038;Login=yyyy;Password=mysecret;IncomingContext=internal;TerminalContext=internal;OutgoingContext=internal"));
term = prov.getTerminal("400");
System.out.println(term.getAddresses()+"!!!!!!!!!!!!!!!!!!");
System.out.println("**********1111*******************");
call = (CallControlCall) prov.createCall();
System.out.println("**********222*******************");
call.connect(term, term.getAddresses()[0], "401");
System.out.println("**********3333*******************");
// Esperamos unos segundos en los que debe descolgar.
System.out.println("**********3333*******************");
Thread.sleep(1000);
System.out.println("**********4444*******************");
// Suponemos que sólo hay una llamada activa en el terminal.
call2 = (CallControlCall) prov.createCall();
System.out.println("**********555*******************");
tcs = call.getConnections()[0].getTerminalConnections();
System.out.println("**********666*******************");
cons = call2.consult(tcs[0], "403");
System.out.println("**********777*******************");
call.setTransferController(call.getConnections()[0].getTerminalConnections()[0]);
System.out.println("**********888*******************");
call2.setTransferController(call2.getConnections()[0].getTerminalConnections()[0]);
System.out.println("**********999*******************");
call.transfer(cons[0].getCall());
System.out.println("**********§§§§§§§§§§§§§§******************");
Thread.sleep(1000);
prov.shutdown();
} catch ( Exception e ){
System.out.println(e.toString());
}
System.exit(0);
}
}
SVP aider moi ????
merci d'avance.
Utile
+6
plus moins
ok, le probleme c'est que, une fois les enregistrements effectués apres la saisie de l'utilisateur l'objet est enregistrer dans un fichier via cette commande :

public void ecrire(Assoc tmp) throws IOException {
if (tmp != null) ofW.writeObject(tmp);
}

cad que l'objet de type Assoc "tmp" est ecrit ds le fichier, mais lorsque que j'extrait le contenu du fichier et que j'essaye d'acceder au tableau d'objets que l'objet de type Assoc possede comme variable le programme plante avec l'erreur dt on parle.

les variables d'un objet "Assoc" st les suivantes :

static Membre [] listeM;
private int nbMembre;
private float capital;
private String nomassoc;
byte rep;
int numM;

et celles d'un "Membre" celles ce :

private String nom, prenom, adresse, ville, cp, telfixe, telport,reponse;
private credit [] tabcredit;
private achat [] tabachat;
private float compte;
private boolean cotisation;
private char repon;
private byte jour,mois,annee,rep;

est ce que lorsqu'on enregistre l'objet de type "Assoc" le tableau de Membres (listeM) est egalement enregistré ds le fichier ? (ainsi que les donnees contenues ds les membres) ?

j'essaye de tester autant que possible et j'ai l'impression que les donnees du tableau listeM (de type Membre) ne s'enregistre pas ..
Utile
+4
plus moins
j'essaie de parcourer mon code autre fois
je change et je fais un constructeur qui contient le contenu du main j'essaie de faire une initiation du parametre Adsresse mais tj meme faute !!!
comment résoudre ce problème!!!
Utile
+3
plus moins
Oulà oulà du calme :o) Java ça "enregistre" très bien ^^

Bon en gros tu essaies d'affecter des valeurs à des attributs d'un objet non instancié comme on t'a dit plus haut. Exemple

Plop objetplop;
...
objetplop.attributplop="plop"; //<-- Null Pointer Exception

Ca ça plante parce que objetplop n'est pas alloué en mémoire (ie tu n'as pas fait le fameux new !). Il suffit donc que tu repères à quelle ligne ça plante (sur quel objet ça plante) et que tu l'alloues :

Plop objetplop=new Plop();
...
objetplop.attributplop="plop";

C'est aussi le genre d'erreur qui se produit quand on remplit un tableau et qu'on essaie de remplir une case en dehors du tableau.

Bonne chance ;o)
Utile
+3
plus moins
Donc si je comprend bien avec la structure suivante :

Assoc
-nom
-capital
-membre[]

il faut un fichier pour enregister l'objet de type Assoc et un fichier pour le tableau de membres, on ne peut pas directement enregistrer l'objet Assoc qui contient le tableau rempli, c'est ca ?
Utile
+2
plus moins
salut

l'erreur qui est remontée signifie que quelque part dans ton programme tu fais appel à un objet qui n'a pas été instancié.
Utile
+2
plus moins
Je comprend pas tres bien, l"erreur me vient au chargement du fichier, si je dois ecrire :

Plop objetplop=new Plop();
...
objetplop.attributplop="plop";

ca veut dire que "attributplop" etait pas enregistré ds le fichier, et si je dois lui redonner des valeurs pour chacun de ses attributs je vois pas a quoi ca sert ..?

lorsqu'on enregistre un objet qui possede comme variable un tableau d'objets, les valeurs de ces objets du tableau sont egalement enregistrée ou non ? (jusque la j'ai pas eu l'impression que ca marchait)

je nage un peu la ^^

merci de votre aide
mamiemando 27988Messages postés jeudi 12 mai 2005Date d'inscription ContributeurStatut 17 octobre 2017 Dernière intervention - 25 mai 2005 à 14:57
Je comprend pas tres bien, l"erreur me vient au chargement du fichier, si je dois ecrire [...]

Non ton erreur survient quand tu remplis ta structure de donnée au cours de la lecture du fichier. Nuance ;p

ca veut dire que "attributplop" etait pas enregistré ds le fichier, et si je dois lui redonner des valeurs pour chacun de ses attributs je vois pas a quoi ca sert ..?

C'est un des attributs de ton objet... Supposons que tu as dans un fichier une liste de clients (nom, age, sexe). Tu crées un objet contenant un tableau d'objets Client (ayant pour attributs nom age sexe : donc il faut allouer chacun des clients !). Et ensuite tu les initialises en lisant ton fichier.

Le concept c'est de convertir dans une structure de donnée que tu pourras facilement réutiliser par la suite.

lorsqu'on enregistre un objet qui possede comme variable un tableau d'objets, les valeurs de ces objets du tableau sont egalement enregistrée ou non ? (jusque la j'ai pas eu l'impression que ca marchait)

Non. Il faut les allouer dans le constructeur de ta variable. Fais bien attention à ne pas affecter une 4e valeur dans un tableau de 3 cases. En C ça s'appelle un débordement de pointeur et en java une null pointer exception ;o) Mais c'est en fait la même chose.
Utile
+2
plus moins
Donc si je comprend bien avec la structure suivante :

Assoc
-nom
-capital
-membre[]


Ca me parait bien.

il faut un fichier pour enregister l'objet de type Assoc et un fichier pour le tableau de membres, on ne peut pas directement enregistrer l'objet Assoc qui contient le tableau rempli, c'est ca ?

Ouais. Tu le crées (new) et ensuite tu le remplis. Et contrairement au C++ tu n'as pas besoin de le détruire car java gère ça pour toi (garbage collector)

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !