2009-04-09 81 views
13

以下代码给我一个NullPointerException。问题是以下行:使用HashMap的put方法时的NullPointerException

... 
dataMap.put(nextLine[0], nextLine[6]); 

奇怪的是,我已经没有上述线路和呼叫nextLine[0]nextLine[6]工作完全按预期运行这段代码 - 这是他们给我回一个元素csv文件。我声明并初始化HashMap的代码早些时候方法

String[] nextLine; 
    int counter=0; 
    while (counter<40) { 
    counter++; 

    System.out.println(counter); 
    nextLine = reader.readNext(); 
    // nextLine[] is an array of values from the line 
    System.out.println(nextLine[0] + " - " + nextLine[6] +" - " + "etc..."); 
    dataMap.put(nextLine[0], nextLine[6]); 
    } 
    return dataMap; 
} 

回答

26
HashMap<String, String> dataMap = new HashMap<String,String>(); 

您的dataMap变量在此处未初始化。你应该得到一个编译器的警告。

+0

这个问题真的没有明确地初始化吗?为空? – 2009-04-09 16:13:42

+0

我认为Codingscape的意思是说“没有实例化” – 2009-04-09 17:34:52

5

HashMap<String, String> dataMap = null; 

的数据图初始化?它始终为空。

为了澄清,您声明该变量并将其设置为null。但是你需要实例化一个新的Map,不管它是一个HashMap还是类似的。

例如

datamap = new HashMap(); 

(撇开仿制药等)

+0

是的,很明显,取消引用显式为null的指针会引发NullPointerException。 – Apocalisp 2009-04-09 16:06:09

3

的数据图的已宣告但尚未初始化。它可以初始化为

datamap = new HashMap();

1

那么,有三个对象访问该行。如果nextLine [0]和nextLine [6]不为null,因为上面的println调用起作用,那么就会留下dataMap。你做了dataMap = new HashMap(); somwehere?

0

嗯,究竟是什么你期望当你这样做?

HashMap<String, String> dataMap = null; 
... 
dataMap.put(...)