为什么我通过检查得到NullPointerException?

时间:2014-04-21 17:58:33

标签: java 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方法不起作用?

2 个答案:

答案 0 :(得分:5)

行的唯一方法

if (currentSession.get("isInternetExplorerAvailable") != null) // line 274
如果NullPointerException为空,则

抛出currentSession。首先添加一个检查:

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

答案 1 :(得分:1)

您当前的会话&#39;第274行中的变量为null。 当您尝试拨打“获取”时会出现例外情况。在null。

尝试

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