IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Runtime error pour tableau non initialisé


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Par défaut Runtime error pour tableau non initialisé
    J'ai une classe Descriptor dont j'ai plusieurs instances en tableau (le tableau "subDescSet"), et une "inner class" Lang qui est intérieure à Descriptor, également avec plusieurs instances de Lang par objet Descriptor, inclus dans un tableau langSet. Voici la déclaration de Descriptor et de sa classe intérieure Lang.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class Descriptor{
    	Descriptor(int t, int len, int[] data, int nlang){
    		tag=t;
    		length=len;
    		Lang[] langSet=new Lang[nlang];
    		for(int i=0;i<nlang;i++){
    			int[] codeArray=new int[]{data[8*i],data[8*i+1],data[8*i+2]};
    			int type=data[8*i+3];
    			int p1=256*data[8*i+4]+data[8*i+5];
    			int p2=256*data[8*i+6]+data[8*i+7];
    			langSet[i]=new Lang(codeArray,type,p1,p2);
    	}
     
    	}
    	int tag;
    	int length;
    	Lang[] langSet;
    	public class Lang{
    		Lang(int[] codeArray,int t,int p1, int p2){
    			String code=new String(codeArray,0,3);
    			type=t;
    			pageId=p1;
    			anPageId=p2;
     
    			}
     
    		int iCode;
    		String sCode;
    		int type;
    		int pageId;
    		int anPageId;
    	}
    }
    L'initialisation du tableau de langs est faite dans le constructeur de l'instance de Descriptor.

    Dans mon application principale je déclare le tableau d'objets Descriptors et j'initialise chacun des Descriptors avec le constructeur, en lui transmettant les paramètres qu'il faut ainsi que le nombre d'objets Lang à créer.
    Voici la partie de code où il y a cette création
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Descriptor[] subDescSet= new Descriptor[nSub];
    int iSub=0;
    for(int i=0;i<currentPmt.nEl;i++){
    	for(int j=0;j<currentPmt.getElementSet()[i].nbDesc;j++){
    		if ((currentPmt.getElementSet()[i].streamType==6)
    				&(currentPmt.getElementSet()[i].descSet[j].descTag==0x59)){
    			int nlang=
    				(currentPmt.getElementSet()[i].descSet[j].descData.length)/8;
    			int t=currentPmt.getElementSet()[i].descSet[j].descTag;
    			int l=currentPmt.getElementSet()[i].descSet[j].descLength;
    			subDescSet[iSub]=new Descriptor(t,l,
    					currentPmt.getElementSet()[i].descSet[j].descData,nlang);
    			iSub++;
    		}
    	}
    }
    Or à l'exécution j'ai une erreur de "null pointer exception" sur le tableau LangSet[] parce que celui-ci n'a pas été initialisé. Pourquoi ? J'ai essayé d'initialiser ce tableau non dans le constructeur de son objet parent mais dans une méthode "init" du même parent, mais le résultat est le même. Je ne comprends pas pourquoi mon initialisation "langSet[i]=new Lang(codeArray,type,p1,p2);" n'est pas suivie d'effet.

    Gabier

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Dans le constructeur tu déclare un nouveau tableau au lieu d'initialiser ton attribut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Lang[] langSet=new Lang[nlang];
    Il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    langSet=new Lang[nlang];

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Par défaut
    Eh oui Bravo le coup d'oeil ! Faire l'erreur, passe encore, mais ne pas la voir, c'est là la différence entre le débutant et l'expérimenté.

    Merci

    Gabier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Pour un simple copier coller, "Runtime error 13 type mismatch"
    Par coco.on.off dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/07/2014, 10h01
  2. Réponses: 1
    Dernier message: 15/03/2013, 07h47
  3. [XL-2007] Runtime error 1004 pour programme VBA d'optimisation
    Par Ptit_pilou dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/08/2009, 17h28
  4. [TP] Runtime error 200 : programme TP5 non patchable
    Par HERON Daniel dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 02/11/2005, 21h53
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo