无法确定引发 NullPointer 异常的原因

2024-01-23

我有一个看起来像这样的方法:

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) 不提供堆栈跟踪(它显示堆栈跟踪为空)或除异常名称之外的任何其他信息(据我所知)。

这段代码之前运行良好。事实上,在它运行时,我更改了数据访问方法(我在其中收到此异常)正在调用的存储过程,然后此错误开始发生(应用程序根本没有停止)。此后我尝试重建并重新启动但无济于事。我可以将存储过程改回来,但我真的想找出这个错误是从哪里来的,因为考虑到代码中发生异常的位置,存储过程甚至成为此错误的一部分是没有意义的。


您的 doStuff() 方法抛出了 SQLException 以外的其他内容,并且没有被捕获。添加一个 catch(Exception e) 块并记录该异常并看看会发生什么。

此代码示例表现出与您描述的相同的行为:

public class TryCatchTest {
    public static void main(String[] args) {
        try {
            System.out.println("foo");
            throw new NullPointerException();
        } finally {
            try {
                System.out.println("bar");
            } catch (Exception e) {
                e.printStackTrace();
            }
        } // exception thrown here
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法确定引发 NullPointer 异常的原因 的相关文章

随机推荐