Bonjour,
Ce problème peut sembler évident mais malgrès mes recherches sur ce forum et sur google je n'ai pas trouvé de solution :
J'utilise le protocole UDP via les DatagramSocket et DatagramPacket pour réaliser un petit jeu en réseau. J'arrive parfaitement à réaliser la communication entre les machines, de ce côté là aucun problème
A un moment donné je dois créer un Thread dont le but est de lire sur un socket puis de transmettre cette information. J'ai donc crée une classe qui implémente l'interface Runnable dont voici la méthode run (je ne détaille pas le traitement des données, sock est un DatagramSocket supposé ouvert)
Code :
- byte[] tabRecu = new byte[2];
- DatagramPacket packRecep = new DatagramPacket(tabRecu, 2);
- while(true)
- {
- try
- {
- sock.receive(packRecep);
- }
- catch(Exception ex)
- {
- return;
- }
- //traitement des données
- }
|
Le problème est que je souhaite arrêter cette tâche proprement sans utiliser la méthode stop() qui est deprecated. J'ai donc pensé à la méthode habituelle comme un booleen à la place de true mais elle ne marche pas ici.
Cette tâche passe la majeure partie de son temps à attendre la réception d'un paquet sur le socket sock donc même si le booleen est mis sur false la tâche ne sera pas stoppée !
Une autre solution serait de fermer le socket mais ce n'est pas possible car je dois le laisser ouvert. J'ai aussi essayé avec la méthode interrupt() de la classe Thread mais elle ne provoque pas d'exception sur la méthode receive (d'après la doc une exception n'est renvoyée que avec un certain type d'opérations IO)
Si quelqu'un a une idée je le remercie d'avance
Message édité par The Mauler le 13-05-2006 à 21:37:15