You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java/Bukkit中无法从HashMap获取值的问题求助

问题分析与解决:Map.get()返回Null导致拆箱报错

你的代码如下:

public HashMap<Player, Boolean> running = new HashMap<>();

public void load(Player player){
  running.put(player, true);
}

@Eventhandler
public void onInteract(PlayerInteractEvent event){
  if(!running.get(player)) return;
  //More stuff happening here
}

触发的报错:

Cannot invoke "java.lang.Boolean.booleanValue()" because the return value of "java.util.Map.get(Object)" is null

核心问题与修复方案

  • 未正确获取事件中的玩家对象
    onInteract方法里的player变量未定义,必须从PlayerInteractEvent中获取玩家实例:event.getPlayer(),这是基础的代码逻辑错误。

  • Null拆箱引发的异常
    当running中不存在目标玩家的键时,get()方法会返回null。直接对返回值使用!操作符会触发Boolean到boolean的自动拆箱,null拆箱必然抛出NullPointerException。解决方式有两种:

    1. 使用getOrDefault方法,指定默认值避免null:
      if (!running.getOrDefault(event.getPlayer(), false)) return;
      
    2. 先判断键是否存在,再取值:
      Player player = event.getPlayer();
      if (!running.containsKey(player) || !running.get(player)) return;
      
  • 事件注解拼写错误
    注解@Eventhandler的正确写法是@EventHandler(首字母H大写),拼写错误会导致事件方法无法被Bukkit注册,这也是常见的隐性问题。

修复后的完整代码示例

public HashMap<Player, Boolean> running = new HashMap<>();

public void load(Player player){
  running.put(player, true);
}

@EventHandler
public void onInteract(PlayerInteractEvent event){
  Player player = event.getPlayer();
  // 使用getOrDefault避免null拆箱
  if (!running.getOrDefault(player, false)) {
    return;
  }
  // 后续业务逻辑
}

内容的提问来源于stack exchange,提问作者Patnase

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:26:11