2

我有一个访问密钥库的代码。当我的密码错误时,我得到一个 type 异常UnrecoverableKeyException。所以我把我的代码写成:

    try {
            InputStream f = new FileInputStream("<location to file>")
            keyStore.load( f , passwords );
        } catch(UnrecoverableKeyException e){
                 log.error("")

        }

但这并没有抓住例外。因此,在我的catch块中,我将代码更改为:

catch(Exception e)
{
  log.error(e.getClass(),e)
}

它捕获异常并打印类类型为class java.io.IOException. 但是为什么首先我会收到一条异常是的消息UnrecoverableKeyException

究竟发生了什么?

提前致谢。

4

1 回答 1

4

Javadoc forKeyStore.load声明它可以抛出IOException, 并且:

如果错误是由于密码错误,IOException 的原因应该是 UnrecoverableKeyException

这意味着你捕捉到的实际上是一个IOExceptione.getCause()会是一个UnrecoverableKeyException. 打印堆栈跟踪时,您会看到链中的所有原因,这可能导致您认为它是一个UnrecoverableKeyException.

于 2012-07-03T14:40:15.773 回答