2014-04-21 88 views
2

堆棧跟蹤:爲什麼即使通過檢查也會得到NullPointerException?

java.lang.NullPointerException 
    at TestSlot.isInternetExplorerAvailable(TestSlot.java:274) 
    at WebProxyHtmlRendererBeta.getSingleSlotHtml(WebProxyHtmlRendererBeta.java:168) 
    // the rest is irrelevant 

TestSlot#isInternetExplorerAvailable()

public Boolean isInternetExplorerAvailable() { 
    if (currentSession.get("isInternetExplorerAvailable") != null) // line 274 
     return (Boolean) currentSession.get("isInternetExplorerAvailable"); 
    return false; 
    } 

currentSession.get(String key)是一個簡單的提取器從HashMap<String,Object>

去取...... getSingleSlotHtml()

else if (browserName.contains(BrowserType.IE) || browserName.contains(BrowserType.IEXPLORE)) 
     if (!s.isInternetExplorerAvailable()) { // line 168 
     htmlClass += "browserNotAvailable "; 
     imgSrc = imgSrc.split(".png")[0].concat("_unavailable.png"); 
     title = "browser not available"; 
     } else { htmlClass += "browserAvailable "; } 

可疑的事情是,是,我用這個SCCEE測試此相同類型的邏輯:

public class Main { 

    public static void main(String[] args) { 
     Map<String, Object> settings = new HashMap<String, Object>(); 

     settings.put("something", true); 

     if (settings.get("something_else") != null) 
      System.out.println("it's not null"); 
     else 
      System.out.println("it's null"); 
    } 
} 

它放出來"it's null"這意味着我可以用!=做的空檢查。任何想法,爲什麼這不會在TestSlot#isInternetExplorerAvailable方法爲我工作?

+0

@Keppil有它正確的,如果currentSession爲空,你會得到嘗試調用currentSession.get –

回答

5

if (currentSession.get("isInternetExplorerAvailable") != null) // line 274 

拋出NullPointerException的唯一方法是,如果currentSession爲null。首先添加一個支票:

if (currentSession != null && currentSession.get("isInternetExplorerAvailable") != null) // line 274 
+0

對於那些不使用它時,一個空指針異常,如果(currentSession!= null && currentSession.get()行不會彈出,因爲邏輯是快捷方式的。基本上,程序查看錶達式的第一部分,如果它是假的,它不會評估第二部分,但在所有語言中都不是這樣, –

+0

進一步閱讀該項目的文檔:'@return the session。Null if the slot is not used at this moment.' look it is it is actually returns'null'。so obvious。gah。gah。will accept in 6分鐘 – sircapsalot

1

您的'currentSession'變量在行274中爲null。 當您嘗試在null上調用'get'時發生異常。

嘗試

if(comparing 'currentSession != null && currentSession.get("isInternetExplorerAvailable") != null) { ......} 
相關問題