이 문제로 인해 벽이 날 것입니다. 이것은 매우 내가 현재 일하고있는 간단한 온라인 멀티 플레이어 게임을위한 것입니다.UDP를 통해 클라이언트에서 자바로 전송 된 후 직렬화 된 객체에 null 값이 있습니다.
현재 udp를 통해 내 고객에게 패킷을 보낼 수 있으며 제대로 수신 한 것으로 보입니다. 그러나 클라이언트에 직렬화 된 객체를 보내고 반대쪽에서 deserialize 할 때 필요한 값에 액세스하려고하면 NullPointerExceptions이 발생합니다. 객체가 서버 측에서 올바르게 직렬화되고 있는지 확인 했으므로 (데이터를 직렬화 해제하고 데이터를 확인한 결과) 패킷을 전송하는 코드가 매우 잘못 처리되고 있음을 99 % 확신합니다. 여기
은 직렬화 및 서버에서 "데이터 그램"객체를 전송하기위한 코드이다DatagramPacket sendPacket = null;
byte[] buf = null;
//Serialize the datagram object to send as a UDP packet
try {
// Serialize to a byte array
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(data);
buf = bos.toByteArray();
out.close();
bos.close();
} catch (IOException e) {
}
try {
sendPacket = new DatagramPacket(buf, buf.length,
InetAddress.getLocalHost(), 4004);
} catch (UnknownHostException e){}
try {
DatagramSocket sendSocket = new DatagramSocket();
sendSocket.send(sendPacket);
changed = true;
}catch (IOException e) {}
"데이터는"객체 직렬화가 올바른 값 가득; 나는 이것에 확신한다. 나는이 직렬화 복원 후 어떤 값을 읽으려고 할 때, 나는 NullPointerException이 얻을
public Datagram readDatagram() {
byte[] buff = new byte[20000];
DatagramPacket packet = new DatagramPacket(buff, buff.length);
DatagramSocket receiver = null;
try {
receiver = new DatagramSocket(4004);
receiver.receive(packet);
} catch (IOException e) {
System.out.println("ERROR2");
}
Datagram data = null;// = new Datagram();
try {
// Deserialize from a byte array
ByteArrayInputStream bis = new ByteArrayInputStream(buff);
ObjectInput in = new ObjectInputStream(bis);
data = (Datagram) in.readObject();
bis.close();
in.close();
} catch (ClassNotFoundException e) {
} catch (IOException e) {
System.out.println("ERROR3");
}
for (int i = 0; i < 35; i++) {
System.out.print(data.getLevel()[i]);
}
receiver.close();
return data;
}
:
다른 관련 코드 블록은 클라이언트 측에서 수신 블록이다. 누군가가 올바른 방향으로 나를 가리킬 수 있다면 나는 매우 행복해 할 것입니다.
아, 지금은 의도적으로 문제를 테스트하기 위해 localHost로 보냅니다. 내 클라이언트와 서버가 모두 내 컴퓨터에서 실행 중입니다.
헤드 업에 감사드립니다. 예외에 고유 한 인쇄물을 추가했지만 아직이 문제를 해결하기 위해 더 이상 나지 않습니다. – araisbec
내기에 옳았습니다. 나는 이제부터 내 예외 사항을 적절히 처리하는 것에 대한 조언을 확실히 할 것이다. 자, 내가 왜 그 예외를받을 것이라고 생각하니? 데이터 그램은 내가 만든 클래스이고 소스 파일은 내 소스 디렉토리에 있습니다. (Netbeans에 있습니다.) ... 객체를 만들 수도 있습니다. – araisbec
당신은 남자입니다. 나는이 문제를 추구하고 다른 게시물을 읽음으로써 실제로 문제를 발견했습니다. Datagram 클래스의 추가 * 복사본 *을 사용하여 서버 측에서 객체를 만들었지 만 다른 * 패키지 이름 *. 나는 그것이 그 감동적인 것을 전혀 몰랐다. – araisbec