无法捕捉异常

Ash*_*way 1 java exception try-catch

下面的代码抛出一个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();
} 
Run Code Online (Sandbox Code Playgroud)

因此未捕获异常并显示以下输出:

未捕获的错误获取图像:
java.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection(Unknown Source)
at sun.awt.image.URLImageSource.getDecoder(Unknown Source)
at sun.awt.image.InputStreamImageSource.doFetch(Unknown) Source)
at sun.awt.image.ImageFetcher.fetchloop(Unknown Source)
at sun.awt.image.ImageFetcher.run(Unknown Source)

wer*_*ero 5

错误原因很可能是您将空 URL 传递给Toolkit.createImage.

图像加载由sun.awt.image.ImageFetcher. 它在自己的线程中运行(实际上它是从 派生的Thread),因此您的 catch 块不会捕获其错误