hey Dans le cadre d'un projet, j'ai dû écrire un petit client IRC pour l'intégrer. Tout fonctionne bien jusqu'à ce que le programme soit fermé et le thread qui lit l'entrée du canal IRC attend plus d'entrée et ne meurt jamais. InBuffer est simplement une chaîne et dans est un lecteur tamponné sur le socket. la variable die est un booléen et ma pensée était que je peux mettre cela à vrai et il tombera le fil. Le problème est que "inBuffer = in.readLine()" est assis là jusqu'à ce qu'il obtienne une autre ligne.
Quelqu'un peut-il me donner un coup de main?Tuer un thread qui attend la sortie du socket
Répondre
Fermez le flux in
, readLine()
devrait alors revenir null
instantanément.
oublié bufferedReader avait une méthode "ready()" pour tester si elle avait quelque chose dans le tampon. tester cela a fait l'affaire.
Vous pouvez définir un délai d'attente sur le socket et si vous obtenez une exception de délai d'attente, vous pouvez interroger un indicateur d'abandon. Si ce n'est pas le cas, essayez à nouveau de lire.
Vous pouvez consulter cette question: How to terminate a thread blocking on socket IO operation instantly?
Cette question liée à .Net, il s'agit de Java. –
Oups, copié et collé une mauvaise question. J'ai corrigé le lien. – sjlee
Arrêt de la prise pour l'entrée. Cela va fournir un null
à l'appel readLine()
et terminer la boucle.
J'ai essayé de faire une méthode appelée die() qui a simplement fait in.close() mais j'ai dû faire que cette méthode déclare qu'elle lance IOException et mette l'endroit où j'appelle imReader.die() dans un try/catch bloc qui ne fonctionne tout simplement pas. – Alex
@Alex: Essayez de mettre une clause try-catch autour de la boucle while. – thejh