Java 无法捕获异常
下面的代码抛出了一个Java 无法捕获异常,java,exception,try-catch,Java,Exception,Try Catch,下面的代码抛出了一个NullPointerException,该异常不是由mytry catch处理的。为什么会这样,我如何处理这个异常 try { URL url = MyTestApp.class.getResource("deliberately_bad_path/icon.png"); Image img = Toolkit.getDefaultToolkit().createImage(url); ImageIcon icon = new ImageIcon(i
NullPointerException
,该异常不是由mytry 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.urlmagesource.getConnection(未知源)
位于sun.awt.image.urlmagesource.getDecoder(未知源)
在sun.awt.image.InputStreamImageSource.doFetch(未知源)
位于sun.awt.image.ImageFetcher.fetchloop(未知源)
位于sun.awt.image.ImageFetcher.run(未知源)
错误原因很可能是您向Toolkit.createImage
传递了空Url
图像加载由sun.awt.image.ImageFetcher
完成。它在自己的线程中运行(实际上它是从线程
派生的),因此您的catch块没有捕获它的线程。错误原因很可能是您向Toolkit.createImage
传递了空Url
图像加载由sun.awt.image.ImageFetcher
完成。它在自己的线程中运行(实际上它是从线程
派生的),因此您的catch块没有捕获它的线程。使用测试
而不是url
来创建图像是否正确?对不起,我在复制它时重命名了一些东西,这只是一个输入错误,现在可以更正。这是完整的堆栈跟踪吗?如果是这样,那么问题很可能是异常不在线程中……您的第二个catch语句会导致编译错误,因为它不可访问。但是如果我移除它,我可以重现这个问题。非常奇怪。首先,您的捕获块顺序是错误的,您需要在一般异常之前捕获更具体的异常。使用test
而不是url
来创建图像是否正确?抱歉,复制时我重命名了一些内容,这只是一个输入错误,现在可以更正。这是完整的堆栈跟踪吗?如果是这样,那么问题很可能是异常不在线程中……您的第二个catch语句会导致编译错误,因为它不可访问。但是如果我移除它,我可以重现这个问题。非常奇怪。首先,你的捕获块顺序是错误的,你需要在一般异常之前捕获更具体的异常。捕获得好!如果我转到stacktrace中提到的行,我可以看到System.err.println(“未捕获错误获取图像:”)代码>:)有什么我可以处理的吗?@AshleyMedway在将url
传递给createImage
之前,总是检查它是否不为空Class.getResource
如果找不到资源,则返回null。-因此,还要检查资源文件是否存在。@NathanHughes不幸的是,图像获取程序并不关心UncaughtExceptionHandler。它只执行脏的e.printStackTrace()
,当然,从Toolkit开始的整个调用链。createImage
不会检查url参数。很好!如果我转到stacktrace中提到的行,我可以看到System.err.println(“未捕获错误获取图像:”)代码>:)有什么我可以处理的吗?@AshleyMedway在将url
传递给createImage
之前,总是检查它是否不为空Class.getResource
如果找不到资源,则返回null。-因此,还要检查资源文件是否存在。@NathanHughes不幸的是,图像获取程序并不关心UncaughtExceptionHandler。它只执行脏的e.printStackTrace()
,当然,从Toolkit.createImage开始的整个调用链不会检查url参数