Comment attraper un java sans contrôle / exception d'exécution (en particulier SecurityException)

StackOverflow https://stackoverflow.com/questions/1548045

Question

Je classe java avec une méthode qui obtient une image à partir d'un site Web:

private Image image;
private int height;
private int width;
private String imageUri;

public Image getImage() {
    if (image == null) {
        log.info("Fetching image: " + imageUri);
        try {
            URL iURL = new URL(imageUri);
            ImageIcon ii = new ImageIcon(iURL);
            image = ii.getImage();
            height = image.getHeight(null);
            width = image.getWidth(null);
        } catch (SecurityException e) {
            log.error("Unable to fetch image: " + imageUri,e);
        } catch (MalformedURLException e) {
            log.error("Unable to fetch image: " + imageUri,e);
        }
    }
    return image;
}

Le problème est que parfois le imageUri j'essaie d'aller chercher est redirigé, ce qui provoque le constructeur ImageIcon de jeter un java.lang.SecurityException -. Qui n'est pas pris par la clause de capture, ce qui provoque mon programme de mettre fin à

Quelqu'un peut-il suggérer comment je pourrais attraper cette exception?

Merci

Était-ce utile?

La solution 4

En raison de ImageIcon étant très vieille école, et fraie un nouveau fil (que je ne veux pas), ma solution est la suivante:

public Image getImage() {
    if (image == null) {
        log.info("Fetching image: " + imageUri);
        try { 
            URL iURL = new URL(imageUri);
            InputStream is = new BufferedInputStream(iURL.openStream());
            image = ImageIO.read(is);
            height = image.getHeight();
            width = image.getWidth();
        } catch (MalformedURLException e) {
            log.error("Unable to fetch image: " + imageUri, e);
        } catch (IOException e) {
            log.error("Unable to fetch image: " + imageUri, e);
        }
    }
    return image;
}

Les problèmes avec les redirections, les liens morts, etc sont désormais prises en compte.

Autres conseils

L'exception est lancée par le constructeur, qui n'est pas enveloppé dans le bloc try.

new ImageIcon(new URL(imageUri))

Utilisation ImageIcon pour charger une image est sooooo 1998. Vous voulez ImageIO.read () .

Si l'exception en effet jeté de getImage (), votre code doit l'attraper. SecurityException est une exception. Vous avez tort quelque part. Par exemple, placer constructeur ImageIcon sous essayer. Si cela ne fonctionne pas, essayez

catch( Throwable th )

Il est une mauvaise habitude bien. Essayez au moins de re-jeter (ou une exception emballage) après la connexion.

Ceci est un vieux fil - mais je pensais que d'ajouter une autre réponse que je l'ai eue après avoir atteint le même problème et frapper ce message

.

Depuis que je ne veux pas ajouter d'autres dépendances à mon application (= javax) J'ai utilisé la solution proposée ici pour obtenir le bitmap et puis j'utiliser setImageBitmap dans ce cas, la SecurityException est pris

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top