如何捕捉一个java未检查/运行时异常(特别SecurityException异常)

我有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子句,导致我的程序终止。

任何人都可以建议我怎么可能赶上这个异常?

谢谢

--------------解决方案-------------

该异常被抛出的构造,这是不包裹在try块。

new ImageIcon(new URL(imageUri))

使用的ImageIcon加载图像SOOOOO 1998年你想要ImageIO.read()。

如果异常,从的getImage确实抛出(),你的代码应该抓住它。 SecurityException异常是例外。 你理解错了地方。 例如,将ImageIcon的构造下试一下。 如果没有问题,请尝试

catch( Throwable th )

这是一个不好的习惯,虽然。 至少尝试登录后,重新把它(或包装除外)。

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

通过重定向的任何问题,死链接等,现在正常处理。

分类:java的 时间:2015-03-14 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.643 (s). 10 q(s)