как остановить блочный метод DatagramSocket.receive() в потоке

я создаю 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() не рекомендуется. как это сделать?

10
задан cloud 1 November 2011 в 03:21
поделиться