![](/img/trans.png)
[英]findbugs showing sessionFactory is null guaranteed to be dereferenced
[英]Findbugs error - Bug: br is null guaranteed to be dereferenced on exception path
我需要閱讀屬性文件。 我為此使用BufferedReader和FileReader。 我在try部分之前將BufferedReader初始化為null,然后在try部分中進行初始化。 最后,我要關閉讀者。 此時,我得到標題中提到的錯誤。
完整的代碼如下
public void getPageTitleProperties() throws IOException
{
BufferedReader br = null;
String lhs, rhs;
try
{
br = new BufferedReader(new FileReader("res" + File.separator + "pagetitle.properties"));
String line;
while ((line = br.readLine()) != null)
{
String [] keyvalue = line.split("=");
lhs = keyvalue[0];
rhs = keyvalue[1];
expectedTitles.put(lhs, rhs);
}
}
catch (RuntimeException ex)
{
ex.printStackTrace();
}
catch (IOException ex)
{
ex.printStackTrace();
}
finally
{
br.close();
}
System.out.println("Expected URLs and Titles");
for (String url : expectedTitles.keySet())
{
System.out.println(url + ":" + expectedTitles.get(url));
}
}
錯誤的詳細信息是-
如何擺脫這個錯誤? 我曾嘗試將BR初始化為非null,然后在try塊中將其初始化(這無法工作,因為無法在finally塊中解析變量:)。 在一些類似的帖子中,人們提到這可能是假陰性。 我還參考了-http://findbugs.sourceforge.net/bugDescriptions.html#NP_GUARANTEED_DEREF ,但無法弄清楚如何擺脫該錯誤。
如何擺脫這個錯誤?
問題是,如果BufferedReader
或FileReader
構造函數引發異常,則br
將為null,但您仍無條件調用br.close()
。 在finally塊中將其關閉之前,請檢查br
是否為空:
finally {
if (br != null) {
br.close();
}
}
或者,在try
塊之前分配它:
BufferedReader br = new BufferedReader(...);
try {
...
} catch (...) {
...
} finally {
br.close(); // br will definitely not be null
}
甚至在Java 7中更好,請使用try-with-resources語句:
try (BufferedReader br = new BufferedReader(...)) {
...
} catch (...) {
...
}
請注意,當前您的catch
塊正在轉儲錯誤,然后繼續進行,就好像什么都沒發生一樣-而我希望將異常傳播給調用者。 如果無法讀取文件,您想怎么辦? (通過我建議的第二和第三次更改,您仍然會吞下實際讀取的異常,但不會打開文件。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.