Java에서 새 클래스를 코딩하려고 시도했지만 Map 및 HashMap을 사용하여 모든 클래스에서 맵을 로컬로 선언하지 않고 다른 클래스에 정보를 전달합니다.지도 및 다른 클래스를 사용하여 NullPointerException
나는 새로운 클래스 4 개 가지 방법이있다 "GetRoom.java"만들었습니다
- 무효 addRoom (INT ID를 룸 룸)
- 룸 byID (INT 아이디)
- 부울 containsID (INT 아이디)
- 룸 doIexist() 다음과 같이
코드는 : 나는 다른 클래스의 byID 기능을 사용하는 경우는, 반면, NullPointerException이 반환됩니다 내가 다음 doIexist 기능을 사용하는 경우는 룸 ID 5를 반환합니다
private static Map<Integer, Room> hotelRooms = new HashMap<Integer, Room>();
public static void addRoom(int id, Room room){
hotelRooms.put(id, room);
}
public static Room byID(int id){
return hotelRooms.get(id);
}
public static Room doIexist(){
return hotelRooms.get(5);
}
public static boolean containsID(int id){
return hotelRooms.containsKey(id);
}
. hotelRooms.size()를 호출하면 전에는 42 개의 객실로 채워져 있지만 GetRoom.java 외부에서는 참조 할 수 없다는 것을 알 수 있습니다.
도움이 정말 감사드립니다!
편집 : 나는에서 코드를 호출 할 경우 이것은 :
public static void Compose(ServerHandler Client, User theUser, Environment Server) throws Exception
{
User CurrentUser = Client.GetSession();
int RoomId = CurrentUser.CurrentRoomId;
Channel Socket = Client.Socket;
Room R = GetRoom.byID(RoomId); // If I change this to GetRoom.doIExist(); it will work
ServerMessage HeightMap = new ServerMessage(ServerEvents.HeightMap1);
HeightMap.writeUTF(R.GetModel().getMap());
HeightMap.Send(Socket);
ServerMessage RelativeMap = new ServerMessage(ServerEvents.HeightMap2);
String Map = R.GetModel().SerializeRelativeMap;
RelativeMap.writeUTF(Map);
RelativeMap.Send(Socket);
}
스택 트레이스 :
java.lang.NullPointerException
at messages.outgoing.rooms.LoadMapsMessageComposer.Compose(LoadMapsMessageComposer.java:30)
at messages.incoming.rooms.LoadMapsMessageEvent.run(LoadMapsMessageEvent.java:28)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
LoadMapsMessageComposer.java:30이
이있는 라인 HeightMap.writeUTF (R.GetModel(). getMap());
스택 추적 및 호출 코드를 확인해야합니다. 이것은보기 좋게 보이고, 나는 문제가 다른 곳에다는 것을 의심한다. – chrylis
어디서 전화를 받았는지 알 수 있도록 게시물을 업데이트했습니다. 하루 종일이 작업을 수행하려고 노력해 왔지만 왜 작동하지 않는지 전혀 알지 못합니다. – user2331349
그리고 스택 추적. 참고로 C# 명명법을 사용하고있는 것처럼 보이며 코드를 읽는 모든 Java 개발자에게 혼동을 줄 수 있습니다. Java에서 규칙은 멤버 이름 (메서드 및 변수)에 소문자로 시작하는 문자를 사용하는 것입니다. 나는 당신의 실제 NPE가'R.GetModel()'호출에서 발생하고 있다고 의심한다. 왜냐하면'byID'는 그 키에 대한 맵 엔트리가 없다면'null'을 반환 할 것이기 때문이다. – chrylis