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.
L'initialisation du tableau de langs est faite dans le constructeur de l'instance de Descriptor.
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; } }
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
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.
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++; } } }
Gabier
Partager