无法捕捉到异常
以下代码会抛出NullPointerException
,这不是由我的try catch
处理的。为什么会这样,我该如何处理这个异常?无法捕捉到异常
try
{
URL url = MyTestApp.class.getResource("deliberately_bad_path/icon.png");
Image img = Toolkit.getDefaultToolkit().createImage(url);
ImageIcon icon = new ImageIcon(img);
} catch (Exception e)
{
System.out.println("Okay it was an Exception");
e.printStackTrace();
} catch (Throwable e)
{
System.out.println("Okay it was a throwable");
e.printStackTrace();
}
所以异常没有被捕获并显示了下面的输出:
未被捕获的错误获取图像:
显示java.lang.NullPointerException
在sun.awt.image.URLImageSource.getConnection (Unknown Source)
at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
at sun.awt.image.InputStreamImageSource.doFetch(Unknown Source)
在sun.awt.image.ImageFetcher.fetchloop(来源不明)
在sun.awt.image.ImageFetcher.run(来源不明)
错误的原因是最有可能的是你通过一个空的URL Toolkit.createImage
。
该图像加载完成于sun.awt.image.ImageFetcher
。它运行在一个自己的线程(实际上它来自Thread
),因此你的catch块没有赶上它的error。
好抓!如果我去堆栈跟踪中提到的行,我可以看到'System.err.println(“Uncaught error fetching image:”);':) –
有没有办法处理这个问题? –
@AshleyMedway在将它传递给'createImage'之前总是检查'url'是否为空。如果Class.getResource找不到资源,则返回null。 - 因此还要检查资源文件是否存在。 – wero
使用'test'而不是'url'来创建图像是否正确? – josivan
对不起,我在复制时重命名了一些内容,它只是一个错字,现在会更正。 –
他的'catch(Exception e)'应该抓住NullPointer吗? – Ivaro18