Une exception java dont je ne veux pas

Résolu/Fermé
delfre56 Messages postés 340 Date d'inscription mardi 3 juillet 2012 Statut Membre Dernière intervention 23 février 2018 - 11 nov. 2015 à 16:30
delfre56 Messages postés 340 Date d'inscription mardi 3 juillet 2012 Statut Membre Dernière intervention 23 février 2018 - 11 nov. 2015 à 17:59
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 ?
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 nov. 2015 à 16:47
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) {
    // ...
}
0
delfre56 Messages postés 340 Date d'inscription mardi 3 juillet 2012 Statut Membre Dernière intervention 23 février 2018 48
11 nov. 2015 à 17:59
Merci !
0