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

我试图将键和值放在另一个类的 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();


}


@Override

public 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


长风秋雁
浏览 130回答 1
1回答

茅侃侃

问题是您从未初始化instanceof Main:更改:public static Main getInstance() {&nbsp; &nbsp; return instance;}到public static Main getInstance() {&nbsp; &nbsp; if(instance == null) {&nbsp; &nbsp; &nbsp; &nbsp; instance = new Main();&nbsp; &nbsp; }&nbsp; &nbsp; return instance;}这是“延迟加载”单例的典型模式。此外,您应该将构造函数private Main()设为私有,因为我预计应该只有一个Main.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java