質問

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

次のように

によりイメージアイコンが非常に古い学校であること、そして(私はしたくない)新しいスレッドを生成し、私の解決策はあります:

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

などのリダイレクト、死者のリンクを持つすべての問題は現在正常に処理されます。

他のヒント

例外はtryブロックでラップされていないコンストラクタによってスローされます。

new ImageIcon(new URL(imageUri))

ImageIcon を使用して画像をロードするのは、1998 年です。あなたが欲しいのは ImageIO.read().

例外が実際のgetImage(から投げた場合)、あなたのコードは、それをキャッチする必要があります。 SecurityExceptionが例外です。あなたはどこか、それは間違っているんです。例えば、トライの下にイメージアイコンのコンストラクタを置きます。それが解決しない場合は、してみてください。

catch( Throwable th )

これは、しかし悪い癖です。少なくともそれをログインした後に再スローそれ(またはラッパー例外)にしてみます。

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

アプリ(= javax)に依存関係を追加したくないので、 ここで提案される解決策 ビットマップを取得してから使用しました setImageBitmap この場合、 セキュリティ例外 捕まった

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top