为了账号安全,请及时绑定邮箱和手机立即绑定

尝试修改其他类中的 HashMap 时的 NPE

尝试修改其他类中的 HashMap 时的 NPE

长风秋雁 2021-08-19 17:51:28
我试图将键和值放在另一个类的 HashMap 中。NPE 不应该发生。我的实例设置正确,因为我可以毫无问题地访问 RingCreation 中的方法,但是当我尝试将对象放入 Main 中的 HashMap 时,它返回空指针错误,但是当我发出 HashMap 的调试消息时,它检测到它不是空的。我不想通过发布“又一个 NPE”日志来令人讨厌。我通常能够修复出现的大多数错误。主班HashMap<Integer,ItemStack> ringHolder = new HashMap<Integer,ItemStack>();private RingCreation createRing;private static Main instance;public Main() {    this.createRing = new RingCreation();}@Overridepublic void onEnable() {    if(ringHolder.isEmpty()) System.out.println("ringholder is empty");    instance = this;    createRing.CreateLifeRing();    createRing.CreateRegenerationRing();    createRing.CreateStarterRing();}public static Main getInstance() {    return instance;}}环创建类:private RingOfLife ringLife;private StarterRing startRing;private RingOfRegeneration regenRing;private Main main = Main.getInstance();public RingCreation() {     this.ringLife = new RingOfLife();    this.startRing = new StarterRing();    this.regenRing = new RingOfRegeneration();}ItemStack ringOfLife;ItemMeta ringOfLifeMeta;ItemStack starterRing;ItemMeta starterRingMeta;ItemStack ringOfRegeneration;ItemMeta ringOfRegenerationMeta;public void CreateLifeRing() {    ringOfLife = new ItemStack(Material.RECORD_4);    ringOfLifeMeta = ringOfLife.getItemMeta();    ringOfLifeMeta.setDisplayName(ChatColor.GRAY+"Ring of"+ChatColor.GREEN+" Life");    ringOfLifeMeta.addItemFlags(ItemFlag.values());    ringOfLife.setItemMeta(ringOfLifeMeta);    System.out.println("createlifering working");    int loc = 2;    main.ringHolder.put(loc, ringOfLife);}主线33:createRing.CreateLifeRing();环创建第 44 行:main.ringHolder.put(loc, starterRing);控制台还输出:createlifering working
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

问题是您从未初始化instanceof Main:

更改:


public static Main getInstance() {

    return instance;

}


public static Main getInstance() {

    if(instance == null) {

        instance = new Main();

    }

    return instance;

}

这是“延迟加载”单例的典型模式。

此外,您应该将构造函数private Main()设为私有,因为我预计应该只有一个Main.


查看完整回答
反对 回复 2021-08-19
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信