Tuer un thread bloqué en lecture.
Bonjour
Je cherche à tuer un thread java malgré le fait que celui-ci soit bloqué sur une opération d'E/S (Lecture dans un flux d'entrée). J'ai trouvé beaucoup de réponses sur le sujet mais aucune qui me convienne.
Pour le moment j'ai redéfinit la méthode interrupt() pour qu'elle ferme le flux d'entrée. Malheureusement mon programme se fige après être entré dans la méthode interrupt() (Si vous regardez le code il affiche la string"avant" mais pas "apres").
Pour le moment je ne vois aucune solution simple qui me permette de tuer le thread.
Qualqu'un aurait-il une idée??
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
public void run()
{
try
{
this.priseClient=new Socket(this.adresseIp,2007);
this.fluxOut=new PrintWriter(this.priseClient.getOutputStream());
this.fluxIn=new BufferedReader(new InputStreamReader(this.priseClient.getInputStream()));
while(true)
{
String messageServeur="";
if(ModeleClient.interrupted())
{
return;
}
//Méthode bloquante qui lit les les envois du serveur (rencoi null si rien n'est lu)
messageServeur=this.fluxIn.readLine();
//si rien n'est lut car le flux est fermé
if(messageServeur==null)
{
return;
}
//si le serveur envoie un message
else if(messageServeur.length()>0)
{
//on met à jour le forum de l'IHM
this.fireForumChanged(messageServeur);
}
}
}
catch (IOException e)
{
e.printStackTrace();
this.fireMessageErreur(e.getMessage());
}
finally
{
this.fluxOut.close();
try
{
this.fluxIn.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
public void interrupt()
{
super.interrupt();
try
{
System.out.println("avant");
this.fluxIn.close();
System.out.println("apres");
}
catch (IOException e)
{
e.printStackTrace();
}
}
public void Deconnecter()
{
this.interrupt();
} |
Merci d'avance de vos réponses :D