原因:socket.receive(packet)会锁死对象packet,主线程锁死packet对象后,在start()的子线程中不能调用 packet.属性,packet.方法()。
解决办法:
while(true){
byte[] data=new byte[1024];//创建字节数组,指定接受的数据包的大小
DatagramPacket packet=new DatagramPacket(data, data.length);
socket.receive(packet);//此方法在接受到数据之前会一直阻塞
UDPServerThread serverThread=new UDPServerThread(socket,apcket,data);
serverThread.start();
}
这样在while循环到第二次时,new了一个新的packet对象,主线程锁住新对象,上一次的对象自动解锁,上一次循环时新建的子线程中的对packet进行调用的方法才可以开始执行