이해도 | 플러그인 |
---|---|
게임버전 (JE) | 버킷 |
제가 리듬게임 플러그인 구현하는데 문제가 생겼는데, 어떻게 해야 하나요?
문제의 코드 :
Variables.Scores returnScore = null; //문제의 변수 HashMap<Player, Variables.Scores> dHash = new HashMap<>(); for (int i = 0; i < Variables.q.size(); i++) { for (Player pe : Variables.q.get(i).keySet()) { if (pe.equals(p)) { returnScore = Variables.q.get(i).get(pe); Variables.q.get(i).remove(pe); break; } } } if (p.getInventory().getHeldItemSlot() != 4) { ArmorStand tArmorStand = null; List<Entity> a = p.getWorld().getEntities(); for (Entity e : a) { if (e.getCustomName() == Variables.SUMMONTOKEN) { tArmorStand = (ArmorStand)e; break; } } if (tArmorStand == null) { returnScore.MISS++; // 문제가 생긴곳 dHash.put(p, returnScore); GameFunc.putToQ(dHash, p); }
오류 내용 :
[13:09:00] [Server thread/WARN]: [rhythmcraft] Task #24 for rhythmcraft v1.0.1 generated an exception
java.lang.NullPointerException: null
at com.github.neomaster.rhythmcraft.game.repeat.GameRepeat$2.run(GameRepeat.java:75) ~[?:?]
at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftTask.run(CraftTask.java:81) ~[spigot-1.12.2.jar:2991-Spigot-018b9a0-f3f3094]
at org.bukkit.craftbukkit.v1_16_R3.scheduler.CraftScheduler.mainThreadHeartbeat(CraftScheduler.java:400) [spigot-1.12.2.jar:2991-Spigot-018b9a0-f3f3094]
at net.minecraft.server.v1_16_R3.MinecraftServer.b(MinecraftServer.java:1060) [spigot-1.12.2.jar:2991-Spigot-018b9a0-f3f3094]
at net.minecraft.server.v1_16_R3.DedicatedServer.b(DedicatedServer.java:355) [spigot-1.12.2.jar:2991-Spigot-018b9a0-f3f3094]
at net.minecraft.server.v1_16_R3.MinecraftServer.a(MinecraftServer.java:1008) [spigot-1.12.2.jar:2991-Spigot-018b9a0-f3f3094]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:847) [spigot-1.12.2.jar:2991-Spigot-018b9a0-f3f3094]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) [spigot-1.12.2.jar:2991-Spigot-018b9a0-f3f3094]
at net.minecraft.server.v1_16_R3.MinecraftServer$$Lambda$3198/1976267310.run(Unknown Source) [spigot-1.12.2.jar:2991-Spigot-018b9a0-f3f3094]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_51]
DDang_
2021.06.2275번째 줄 확인하세요
A_bins
2021.06.23NPE 즉 NullPointerException이 어떤 연유로 인해, 어떤 의미를 가지는지도
알아보신다면 대충 문제 파악이 되셨을 것이고 그에 따라
문제의 변수가 무엇인지도 잘 아시는 듯 한데, 솔루션은 딱 하나 아닐까요?
결국에, returnScore라는 Scores 타입의 변수가 null이라서 그런 것 아니겠습니까?
그렇기에 일단 먼저 returnScore라는 변수에 값이 제대로 대입이 되는가 부터 알아보시죠
예컨데
if (pe.equals(p)) { returnScore = Variables.q.get(i).get(pe); Variables.q.get(i).remove(pe); break; }
이 부분 말입니다 if가 넘어가는지는 확실히 알고 계신가요? pe라는 변수는 Player 객체인 것으로 보아 그에 대한 equals 대상인 p도 Player 객체로 예상이 됩니다.
하지만, 자바를 조금 해보셨다면 아시겠지만 객체입니다
또한 Player 객체 클래스에는 equals를 오버라이드 하는 새로운 로직이 없습니다
그렇기에 객체에 equals를 해버리시면 무조건 주소값이 같거나 해야 equlas를 넘어가지 않을까 하고 예상해 봅니다
테스트 해보시죠 pe.equals(p)가 true를 반환하는가요.
한국산로얄감자
2021.06.26감사합니다!ㅠㅠ