我有一个看起来像这样的方法:
try {
doStuff();
} catch (Exception ex) {
logger.error(ex);
}
(我并没有真正使用像 doStuff 这样的方法名称——这只是为了让事情变得简单)
在 doStuff 中,我做了很多事情,其中包括调用以以下内容结尾的数据访问方法(因此,doStuff 中的另一个方法):
} catch (SQLException ex) {
logger.error(ex);
} finally {
try {
connection.close();
proc.close();
results.close();
} catch (Exception e) {
logger.error(e);
} //<--Exception thrown here. HUH?
}
return stuff;
单步执行此代码时,我到达倒数第二个大括号(标有注释),然后跳到第一个代码块中的 catch 处,并出现 NullPointer 异常。这results.close()
是它之前正在运行的内容(结果不为空)。我的 IDE (NetBeans) 不提供堆栈跟踪(它显示堆栈跟踪为空)或除异常名称之外的任何其他信息(据我所知)。
此代码之前运行良好。事实上,当它运行时,我更改了数据访问方法(我得到这个异常的地方)正在调用的存储过程,然后这个错误开始发生(应用程序根本没有停止)。从那以后,我尝试重建和重新启动,但无济于事。我可以将 sproc 改回来,但我真的很想知道这个错误是从哪里来的,因为考虑到异常发生在代码的哪个位置,sproc 甚至会成为其中的一部分是没有意义的。