gpt4 book ai didi

java - 没有明显原因的空指针异常

转载 作者:行者123 更新时间:2023-11-29 10:14:00 26 4
gpt4 key购买 nike

我正在开发一个 Bukkit 插件(该错误与 bukkit 或它的 api 无关,但我包括了我使用它是为了完整性的事实,如果你不知道它是什么/没听说过的话它你应该仍然能够回答这个问题)。我正在开发的插件是一个反聊天垃圾邮件插件。我无缘无故地收到空指针异常。这是一些代码:

public class SpamListener implements Listener{
private HashMap<String, Long> lastMessage;
private HashMap<String, Integer> spamScore;

public void init(){
lastMessage = new HashMap<String, Long>();
spamScore = new HashMap<String, Integer>();
}

@EventHandler
public void playerChatEvent(AsyncPlayerChatEvent e){
if(AntiGrief.instance.config.getBoolean("antispam.enabled") && (!e.getPlayer().hasPermission("antigrief.spam.bypass"))){
Player player = e.getPlayer();
String name = player.getName();
int startingScore = spamScore.get(name); // <-- NullPointerException occurs here

//More spam checking code here

}
}

JavaPlugin 类(主类,对于不熟悉 bukkit 的人):

    spamListener = new SpamListener();
spamListener.init(); // <-- yes the method is being called, same error occurs if the hashmap is instantiated in the constructor and declaration
pm.registerEvents(spamListener, instance);

堆栈跟踪:http://pastebin.com/cciibpXp

提前感谢任何答案:)

最佳答案

我怀疑问题不是 spamScorenull - 而是 map 中的值为 null,因为您尚未填充 map 。然后,您尝试将 null 引用拆箱到 int 失败了。所以想想你的代码是这样的:

Integer startingScoreReference = spamScore.get(name);
int startingScore = startingScoreReference.intValue();

现在很明显,如果 startingScoreReferencenull(如果您的 map 中没有 name 条目,那么第二行将是导致 NullPointerException

所以基本上您需要要么确保您的 map 将始终包含name 的条目,或者您需要处理没有此类条目的情况。例如,您可能想要:

Integer mapValue = spamScore.get(name);
int startingScore = mapValue == null ? 0 : mapValue.intValue();

(intValue() 调用可以转换为 int,具体取决于您的偏好。)

关于java - 没有明显原因的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23357584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com