Une exception java dont je ne veux pas [Résolu/Fermé]

Signaler
Messages postés
340
Date d'inscription
mardi 3 juillet 2012
Statut
Membre
Dernière intervention
23 février 2018
-
delfre56
Messages postés
340
Date d'inscription
mardi 3 juillet 2012
Statut
Membre
Dernière intervention
23 février 2018
-
Bonjour,
je veux utiliser un constructeur avec BufferedImage en java mais il me dit "unreported exception java.io.ioexception must be caught or declared to be thrown". Sauf que moi je n'ai pas demandé la moindre exception :(
Mon constructeur :
public ImageSprites(File file){
super(Color.RED); //ImageSprite hérite d'une autre de mes classes
BufferedImage image = ImageIO.read(file);
}
Comment faire pour :
1) Qu'il ne me demande pas l'exception ?
2) Si 1) n'est pas possible, lancer une exception alors que j'ai déjà une super-classe pour ma classe ?

1 réponse

Messages postés
16141
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
30 mars 2020
2 570
Bonjour,

"moi je n'ai pas demandé la moindre exception"
Toi non, mais tu utilises la méthode ImageIO.read qui elle peut générer des exceptions. Voir la documentation : ImageIO.read(File)

Si une exception se produit, ce qui peut par exemple arriver si le fichier que tu lis n'est pas une image, tu peux soit traiter l'erreur dans ta méthode avec un bloc try/catch, soit propager l'erreur à la méthode appelante avec un throws.

Premier cas, on gère l'erreur tout de suite :

public ImageSprites(File file) { 
    super(Color.RED);
    try {
        BufferedImage image = ImageIO.read(file);
        // actions à faire avec image
    }
    catch (IOException e) {
        // actions à faire si une exception s'est produite dans read
        // par exemple, créer une autre exception, mais d'un autre type
        throw new IllegalArgumentException("Can't read file as an image: "+file, e);
    }
}

Deuxième cas, c'est la méthode appelante qui gérera l'erreur :

public ImageSprites(File file) throws IOException { 
    super(Color.RED);
    BufferedImage image = ImageIO.read(file);
    // actions à faire avec image
}

Dans ce cas, tu déplaces le problème, mais il faudra quand même que la méthode qui appelle le constructeur ImageSprite, gère cette exception (donc de la même manière, soit un try/catch, soit un throws, etc.)

try {
    ImageSprite img = new ImageSprites(file);
}
catch (IOException e) {
    // ...
}
delfre56
Messages postés
340
Date d'inscription
mardi 3 juillet 2012
Statut
Membre
Dernière intervention
23 février 2018
36
Merci !