次のようなメソッドがあります。
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;
このコードをステップ実行すると、最後から 2 番目の中括弧 (コメントでマーク) に到達し、NullPointer 例外を含む最初のコード ブロックのキャッチにジャンプします。はそのresults.close()
直前に実行されているものです (結果は null ではありません)。私の IDE (NetBeans) は、スタック トレース (スタック トレースが null であることを示しています) または例外の名前以外のその他の情報 (私が知る限り) を提供しません。
このコードは、以前は正常に実行されていました。実際、実行中に、データ アクセス メソッド (この例外が発生している場所) が呼び出していたストアド プロシージャを変更すると、このエラーが発生し始めました (アプリケーションはまったく停止されませんでした)。その後、再構築と再起動を試みましたが、役に立ちませんでした。sproc を元に戻すことはできますが、コードのどこで例外が発生しているかを考えると、sproc がこのエラーの一部であっても意味がないため、このエラーの原因を突き止めたいと思います。