Java - 引用HashMap中的对象时出现NullPointerException

时间:2012-11-01 09:04:42

标签: java arrays nullpointerexception hashmap

我目前正在编写一个命令行程序,它应该从文本文件中获取行并将数据添加到HashMaps数组中。我在运行此方法时目前获得NullPointerException

Public class Vaerdata {
String[] linje;
String line;
String line2;
HashMap<String, Stasjon> stasjonsmap = new HashMap<String, Stasjon>();
HashMap<String, Stasjon>[] regionmap = (HashMap<String, Stasjon>[]) new HashMap<?, ?>[6];


void init() throws IOException{
    BufferedReader br = new BufferedReader(new FileReader("stasjoner_norge.txt"));
    BufferedReader brData = new BufferedReader(new FileReader("klimadata2012.txt"));
    for(int i = 0; i < 10; i++){
        brData.readLine();
    }
    br.readLine();
    while((line = br.readLine()) != null){
        linje = line.split("\\s+");
        stasjonsmap.put(linje[1], new Stasjon(Integer.parseInt(linje[1]), linje[2], Integer.parseInt(linje[3]), linje[4], linje[5], linje[6]));
        }
        if(linje[6].equals("AGDER")){
            System.out.println(stasjonsmap.get(linje[1])); //DEBUG
            regionmap[1].put(stasjonsmap.get(linje[1]).navn, stasjonsmap.get(linje[1]));
            System.out.println(regionmap[1].get(stasjonsmap.get(linje[1]).navn)); //DEBUG
        }
    }  
}

我的NullPointerException发生在这一行:

regionmap[1].put(stasjonsmap.get(linje[1]).navn, stasjonsmap.get(linje[1]));

所以我的问题是:当我用HashMaps声明<String, Stasjon>的数组时(Stasjon是我的Stasjon类的一个对象,获取有关某些气象站的信息),为什么我会收到错误在那条线? stasjonsmap.get(linje[1])中的对象已经声明,我无法理解为什么它不允许我在第二个hashmap中引用这个对象。

文本文件中的第一行(我在程序中跳过)之后的每一行都是这样的:
36200 TORUNGEN_FYR 12 ARENDAL AUST-AGDER AGDER

提前;谢谢你的帮助。

3 个答案:

答案 0 :(得分:5)

在这里初始化HashMap数组时

HashMap<String, Stasjon>[] regionmap = (HashMap<String, Stasjon>[]) new HashMap<?, ?>[6];

数组中的所有值都是null

然后尝试在put - 引用上调用HashMap的null方法。

首先,你必须以某种方式初始化你的HashMaps:

for (int i = 0; i < regionmap.length; i++) {
    regionmap[i] = new HashMap<String, Stasjon>();
}

答案 1 :(得分:0)

- 我认为您初始化了HashMap,并且您调用了put()方法。

- 由于HashMap是一个对象,其默认值为null,因此您需要对其进行初始化。

答案 2 :(得分:0)

您已经创建了一个大小为6的Hashmaps数组,但该数组中的所有项目仍然初始化为null。

你可以这样做(也可以摆脱丑陋的演员):

  private static HashMap<String, Stasjun>[] initRegionMap(HashMap<String, Stasjun>... items) {
    return items;
  }

  HashMap<String, Stasjun>[] regionmap = initRegionMap ( 
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>(),
      new HashMap<String, Stasjun>()
    );