Hashmap 崩溃日食

Posted

技术标签:

【中文标题】Hashmap 崩溃日食【英文标题】:Hashmap crashing eclipse 【发布时间】:2011-10-03 11:12:04 【问题描述】:

我正在尝试通过解析 android 中的 plist 文件来加载哈希图,使用此处的 plist 解析器:https://github.com/ZhouWeikuan/cocos2d。 这在过去一直运行良好,但最近我的程序在使用此哈希映射时(解析后)出现空指针异常。 当我尝试调试时,eclipse 开始表现得很奇怪。解析器返回哈希图,我可以在变量视图中查看它的值。当我跨过分配给“世界地图”的线时,日食挂起。当试图在调试模式下查看 worldMap 的值时,我可以看到一个空行但没有值 - 最终 eclipse 崩溃了。

Map worlds = (Map)getWorlds().get("Worlds");
Map worldMap = (Map)worlds.get(String.valueOf(world));
Map levels = (Map)worldMap.get("Levels");

但是,当正常运行程序时,空指针异常会在这些行之后出现。 另外,当我尝试调试时,它不会总是在同一个位置崩溃,所以我很难找到这个错误的来源......

有人知道怎么回事吗?

【问题讨论】:

【参考方案1】:

无法确切告诉您发生了什么,但 NullPointerException 肯定是一个很大的提示。

在上述示例中的每一行代码之后添加一些空检查,我敢打赌,您将能够很快找到错误:

Map whatEverThisIs = (Map)getWorlds();
if (whatEverThisIs == null) 
   /* Do something here */

Map worlds = (Map)whatEverThisIs.get("Worlds");
if (worlds == null) 
   /* Do something here */

Map worldMap = (Map)worlds.get(String.valueOf(world));
if (worldMap == null) 
   /* Do something here */

Map levels = (Map)worldMap.get("Levels");
if (levels == null) 
   /* Do something here */

【讨论】:

好吧,f*k。我以为我在问这个问题之前已经仔细检查了所有内容。当所有键都是字符串时,我正在做 *map.get(integervalue) ... 太棒了,很高兴你把它弄明白了!

以上是关于Hashmap 崩溃日食的主要内容,如果未能解决你的问题,请参考以下文章

我的日食不断崩溃

日食从崩溃中恢复

如何在 GDB 中输出 HashMap 元素?

看完这篇还不懂HashMap的扩容机制,那我要哭了~

面试官:怎么删除 HashMap 中的重复元素?第 3 种实现思路,99% 的人不会!

面试官:怎么删除 HashMap 中的重复元素?第 3 种实现思路,99% 的人不会!