Une exception java dont je ne veux pas

Résolu
delfre56 Messages postés 350 Date d'inscription   Statut Membre Dernière intervention   -  
delfre56 Messages postés 350 Date d'inscription   Statut Membre Dernière intervention   - 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 16760 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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 350 Date d'inscription   Statut Membre Dernière intervention   48
 
Merci !
0