comment puis-je arrêter la méthode des blocs DatagramSocket.recevoir() dans un thread

- je créer un DatagramSocket dans le thread principal,puis créer un intérieur de classe thread pour écouter le port. quand je ferme les DatagramSocket dans le thread principal, il venait toujours sur une erreur socket closed parce que dans l'intérieur de la classe thread, j'ai appelé le receive() méthode,et il s'est bloqué à l'intérieur de la classe thread. voici le code de l'intérieur de la classe:

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();
            }
        }
    }
}

je veux arrêter de l'intérieur de la classe thread avant de fermer la DatagramSocket, mais le stop() méthode n'est pas recommandée. comment puis-je le faire?

OriginalL'auteur cloud | 2011-11-01