我试图将键和值放在另一个类的 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.
添加回答
举报
0/150
提交
取消