Я создаю DatagramSocket
в главном потоке, а затем создаю внутренний поток класса для прослушивания порта. когда я закрываю DatagramSocket
в главном потоке, он всегда сталкивался с ошибкой socket closed
, потому что во внутреннем потоке класса я вызывал метод receive()
, и он блокировал внутренний поток класса. вот код внутреннего класса:
class ReceiveText extends Thread
{
@Override
public void run()
{
while(true)
{
byte[] buffer = new byte[1024];
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
try {
udpSocket.receive(dp);//blocked here
byte[] data = dp.getData();
String message = new String(data, 0 , dp.getLength());
setTxtAreaShowMessage(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Я хочу остановить внутренний поток класса перед закрытием DatagramSocket, но метод stop()
не рекомендуется. как я могу это сделать?