如何捕获 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 子句捕获,从而导致我的程序终止。
谁能建议我如何捕捉这个异常?
谢谢
解决方案 4
由于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;
}
使用重定向,死链接等的任何问题现在处理正常。
其他提示
异常正在由构造,这是不包裹在try块抛出。
new ImageIcon(new URL(imageUri))
使用 ImageIcon 加载图像是 1998 年的事情。你要 ImageIO.read().
如果从的getImage的确抛出的异常(),您的代码应该抓住它。抛出:SecurityException是例外。你弄错了地方。例如,将ImageIcon的构造下试一下。如果没有问题,请尝试
catch( Throwable th )
这是一个坏习惯,虽然。尝试至少在测井它后重新把它(或包装异常)。
这是一个古老的话题 - 但我想增加一个备选答案,因为我达到了同样的问题,打这篇文章后得到它的
。由于我不希望更多的依赖关系添加到我的应用程序(=的javax) 我使用的解决方案建议这里得到位图,然后我用的 setImageBitmap 在这种情况下,的抛出:SecurityException 强>落入
不隶属于 StackOverflow