无法捕捉到异常

问题描述:

以下代码会抛出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(来源不明)

+0

使用'test'而不是'url'来创建图像是否正确? – josivan

+0

对不起,我在复制时重命名了一些内容,它只是一个错字,现在会更正。 –

+0

他的'catch(Exception e)'应该抓住NullPointer吗? – Ivaro18

错误的原因是最有可能的是你通过一个空的URL Toolkit.createImage

该图像加载完成于sun.awt.image.ImageFetcher。它运行在一个自己的线程(实际上它来自Thread),因此你的catch块没有赶上它的error

+0

好抓!如果我去堆栈跟踪中提到的行,我可以看到'System.err.println(“Uncaught error fetching image:”);':) –

+0

有没有办法处理这个问题? –

+0

@AshleyMedway在将它传递给'createImage'之前总是检查'url'是否为空。如果Class.getResource找不到资源,则返回null。 - 因此还要检查资源文件是否存在。 – wero