Un NullPointerException mais pourquoi ?
Bonjour !
Dans le cadre de mes cours, je dois créer une classe permettant de charger/enregistrer des images aux format PPM. Jusque là pas trop dramatique mais j'ai une erreur que je ne m'explique pas.
Dans mon code (plus bas), je créé un tableau de tableau à partir d'une classe Pixels présente dans mon fichier mais lors de l'accés au tableau pour le remplir je reçois une belle erreur:
Code:
1 2 3 4 5 6 7 8
| chouette2.ppm
P3
# CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)
170 115
255
Exception in thread "main" java.lang.NullPointerException
at Image.readFile(Ppm.java:93)
at Ppm.main(Ppm.java:126) |
Mon code:
Code:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| /*
* Code pour le TP des cours de TDAI du CNAM : TP_004
*
* Classe representant une image au format PPM avec ses methodes
* de lecture et ecriture de fichier dans ce meme format.
*/
import java.io.*;
class Pixels {
short r;
short g;
short b;
}
class Image {
/*
* Donnees contenues dans un fichier PPM.
*/
String filename;
String header;
String comments;
short width;
short height;
short bpp;
Pixels [][] px;
/*
* Methode statique de lecture d'un fichier au format PPM.
* Cette methode cree et renvoie egalement un objet de type Ppm.
*/
public void readFile (String filename) {
int i = 0;
int j = 0;
int k = 0;
String str;
String [] parts;
this.filename = filename;
try {
FileReader fr = new FileReader (filename);
BufferedReader br = new BufferedReader (fr);
/*
* Donnes de l'entete du fichier PPM.
*/
this.filename = filename;
System.out.println(filename);
this.header = br.readLine ();
System.out.println(this.header);
this.comments = br.readLine ();
System.out.println(this.comments);
str = br.readLine ();
parts = str.split (" ");
this.width = Short.parseShort (parts [0]);
System.out.print(this.width + " ");
this.height = Short.parseShort (parts [1]);
System.out.println(this.height);
str = br.readLine ();
this.bpp = Short.parseShort (str);
System.out.println(this.bpp);
this.px = new Pixels [this.height][this.width];
/*
* Lecture de tous les pixels de l'images et remplissage
* du tableau de pixels 'ppm.px'.
*/
str = br.readLine();
parts = str.split (" ");
while (str != null) {
if (j >= this.width) {
i++;
j = 0;
}
while (k < parts.length) {
/*
* ERREUR A PARTIR D'ICI !
*/
this.px[i][j].r = Short.parseShort(parts[k++]);
System.out.print(this.px[i][j].r + " ");
this.px[i][j].g = Short.parseShort(parts[k++]);
System.out.print(this.px[i][j].g + " ");
this.px[i][j].b = Short.parseShort(parts[k++]);
System.out.print(this.px[i][j].b);
}
System.out.println(" ");
k = 0;
j++;
str = br.readLine();
parts = str.split (" ");
}
br.close ();
}
catch (IOException e) {
System.out.println (
"Erreur pendant le chargement du fichier : "
+ filename + " : " + e
);
}
}
}
public class Ppm {
public static void main (String [] args) {
Image img = new Image();
img.readFile("chouette2.ppm");
}
} |
Voilà, je ne demande que ca, pourquoi ?
Merci bien ;)