Frage

Ich habe Java Klasse mit einer Methode, die ein Bild von einer Website bekommt:

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;
}

Das Problem ist, dass manchmal die imageUri ich versuche, wird umgeleitet zu holen, den ImageIcon Konstruktor verursachte einen java.lang.SecurityException zu werfen -., Die nicht von der catch-Klausel aufgefangen wird, so dass mein Programm beenden

Kann jemand empfehlen, wie ich könnte diese Ausnahme fangen?

Danke

War es hilfreich?

Lösung 4

Durch ImageIcon extrem alte Schule zu sein und einen neuen Thread Laichen (was ich will nicht), meine Lösung ist wie folgt:

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;
}

Alle Probleme mit Umleitungen, toten Links etc jetzt ordnungsgemäß behandelt werden.

Andere Tipps

Die Ausnahme vom Konstruktor geworfen wird, die nicht im try-Block gewickelt wird.

new ImageIcon(new URL(imageUri))

ImageIcon Mit einem Bild zu laden ist sooooo 1998. Sie wollen ImageIO.read () .

Wenn die Ausnahme in der Tat von getImage geworfen (), Code sollte es fangen. Security ist Ausnahme. Du hast es falsch irgendwo bekam. Zum Beispiel Ort ImageIcon Konstruktor unter Versuch. Wenn dies nicht hilft, versuchen Sie

catch( Throwable th )

Es ist eine schlechte Angewohnheit, though. Versuchen Sie, mindestens bis zur Wieder werfen sie (oder eine Wrapper-Ausnahme), nachdem er die Anmeldung.

Dies ist ein alter Thread -. Aber ich dachte, die Zugabe eine alternative Antwort, da ich es bekam nach dem gleichen Problem zu erreichen und diesen Beitrag schlagen

Da will ich nicht mehr Abhängigkeiten meiner app (= javax) hinzufügen Früher habe ich die Lösung hier vorgeschlagen, um die Bitmap zu bekommen und dann habe ich setImageBitmap in diesem Fall die Security ist gefangen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top