1

Web サイトから画像を取得するメソッドを持つ Java クラスがあります。

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

問題は、取得しようとしている imageUri がリダイレクトされ、ImageIcon コンストラクターが java.lang.SecurityException をスローすることがあります。これは catch 句によってキャッチされず、プログラムが終了します。

この例外をキャッチする方法を誰かが提案できますか?

ありがとう

4

5 に答える 5

1

コンストラクターによって例外がスローされていますが、これは try ブロックにラップされていません。

new ImageIcon(new URL(imageUri))
于 2009-10-10T14:16:26.153 に答える
1

ImageIcon を使用して画像をロードするのは 1998 年です。 ImageIO.read()が必要です。

于 2009-10-11T00:47:07.440 に答える
0

getImage() から実際に例外がスローされた場合、コードはそれをキャッチする必要があります。SecurityException は例外です。あなたはどこかでそれを間違っています。たとえば、ImageIcon コンストラクターを try の下に配置します。役に立たない場合は、試してください

catch( Throwable th )

悪い癖だけど。ログに記録した後、少なくとも再スロー(またはラッパー例外)を試みてください。

于 2009-10-10T14:14:47.433 に答える
0

これは古いスレッドですが、同じ問題に到達してこの投稿にアクセスした後に得たので、別の回答を追加することを考えました。

アプリ (=javax) にこれ以上依存関係を追加したくないので、ここで提案されているソリューションを使用してビットマップを取得し、次にsetImageBitmapを使用しました。この場合、SecurityExceptionがキャッチされます。

于 2015-06-04T09:47:16.657 に答える
0

ImageIcon は非常に古い学校であり、新しいスレッドを生成するため (これは望ましくありません)、私の解決策は次のとおりです。

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

リダイレクト、リンク切れなどの問題が適切に処理されるようになりました。

于 2009-10-11T14:24:53.427 に答える