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

2D Java Discussion :

ImageIO : IOException puis NullPointerException


Sujet :

2D Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut ImageIO : IOException puis NullPointerException
    Bonjour,

    Je tente de créer l'image (fichier jpg) d'un composant par la méthode :
    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
    /** Crée l'image d'un composant. Source trouvée sur "http://java.developpez.com/faq/gui/?page=generalitesAWTSwing#GRAPHIQUE_AWT_enregistrer_image".
     */
    private void créerImage(Component component) {
    	BufferedImage image = new BufferedImage(component.getWidth(), component.getHeight(), BufferedImage.TYPE_INT_RGB);
     
    	Graphics2D g2d = image.createGraphics();
     
    	if(!component.isOpaque()){
    		Color bg = component.getBackground();
    		bg = (bg.getAlpha() < 255) ? new Color(bg.getRed(), bg.getGreen(), bg.getBlue()) : bg;
     
    		Color color = g2d.getColor();
    		g2d.setColor(bg);
    		g2d.fillRect(0, 0, component.getWidth(), component.getHeight());
    		g2d.setColor(color);
    	}
     
    	component.paint(g2d);
    	g2d.dispose();
     
    	try {
    		this.fichierImage = new File("c:/REP" + '/' + this.nomImage +  ".jpg");
    		ImageIO.write(image, "jpeg", this.fichierImage);
    	} catch (IOException e) {      
    		e.printStackTrace();
    	} 
    }
    Le problème, c'est que le répertoire "c:/REP/" n'existe pas. J'obtiens bien une IOException (FileNotFoundException). Mais mon problème est le suivant : Juste derrière, j'obtiens un NullPointerException :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Caused by: java.lang.NullPointerException
    	at javax.imageio.ImageIO.write(Unknown Source)
    	at plado.ressources.PMigEdition.créerImage(PMigEdition.java:203)
    En debug, je pense avoir trouvé la ligne provoquant l'exception :
    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
    //Classe ImageIO :
        public static boolean write(RenderedImage im,
                                    String formatName,
                                    File output) throws IOException {
            if (output == null) {
                throw new IllegalArgumentException("output == null!");
            }
            ImageOutputStream stream = null;
            try {
                output.delete();
                stream = createImageOutputStream(output);
            } catch (IOException e) {
                throw new IIOException("Can't create output stream!", e);
            }
     
            boolean val;
            try {
                val = write(im, formatName, stream);
            } finally {
                stream.close(); // ICI
            }
            return val;
        }
    J'aimerais comprendre ce qu'il se passe, si ce NullPointerException est normal ? Où ai-je fait une faute ?

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    C'est ta méthode createImageOutputStream() qui doit renvoyer null

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Ben c'est pas une méthode à moi, c'est une méthode de ImageIO
    Je suppose donc que soit je teste si le fichier pourra exister (le répertoire existe et/ou droits d'accès), soit j'ajoute un block catch(NullPointerException) ?

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par JohnNC Voir le message
    Ben c'est pas une méthode à moi, c'est une méthode de ImageIO
    Ah je n'avais pas vu cela

    C'est crade elle attrape l'exception et elle retourne null

    Citation Envoyé par JohnNC Voir le message
    Je suppose donc que soit je teste si le fichier pourra exister (le répertoire existe et/ou droits d'accès), soit j'ajoute un block catch(NullPointerException) ?
    Il serait préférable de vérifier l'existence du fichier plutôt que de tester un NPE qui pourrait vouloir dire plein de chose...

    a++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 268
    Par défaut
    Cool, ça vient pas seulement de moi Je vais donc tester l'existence du fichier.

    Merci !

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

Discussions similaires

  1. Comment puis je faire cette effet...
    Par wikers dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/06/2004, 20h40
  2. JPanel & getGraphics() : NullPointerException
    Par dingoth dans le forum Composants
    Réponses: 7
    Dernier message: 21/05/2004, 15h56
  3. Où puis-je trouver l'aide du tPerformanceGraph
    Par Walm dans le forum C++Builder
    Réponses: 3
    Dernier message: 23/03/2004, 19h30
  4. Réponses: 8
    Dernier message: 31/10/2003, 16h21
  5. comment puis-je recupérer l'extesion du fichier?
    Par mirella dans le forum Langage
    Réponses: 7
    Dernier message: 14/08/2002, 15h56

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