Ligne qui bloque tout mon programme.
Fermé
reywas
Messages postés
19
Date d'inscription
dimanche 29 août 2010
Statut
Membre
Dernière intervention
1 mars 2013
-
15 févr. 2013 à 12:22
mimi-bouzid Messages postés 10 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 17 février 2013 - 16 févr. 2013 à 22:51
mimi-bouzid Messages postés 10 Date d'inscription samedi 16 février 2013 Statut Membre Dernière intervention 17 février 2013 - 16 févr. 2013 à 22:51
A voir également:
- Ligne qui bloque tout mon programme.
- Code puk bloqué - Guide
- Aller à la ligne excel - Guide
- Pavé tactile bloqué - Guide
- Site de vente en ligne particulier - Guide
- Partager photos en ligne - Guide
2 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
15 févr. 2013 à 14:57
15 févr. 2013 à 14:57
J'ai un peu du mal avec ta méthode jelancecettefonction(), est-ce que
1) est-ce que la classe thread (avec un t minuscule) est juste une faute de frappe, ou est-ce que c'est une autre classe personnelle ?
2) qu'est-ce que c'est cette classe "Syst" et que fait la méthode sleep ? en particulier, est-ce qu'elle gère correctement les exceptions d'interruption ?
Sinon, pour en revenir à ton run, je pense qu'avec un Scanner à la place de ton BufferedReader tu devrais pouvoir détecter la fermeture de la connexion avec les tests hasNext, il faut tester pour vérifier.
PS. J'ai mis en place les tests d'interruptions, c'est important, on en a déjà parlé l'autre jour dans ton autre discussion Interrompre un thread correctement.
public static void jelancecettefonction() { Thread t = new thread(); // 1 t.start(); Syst.sleep(20000); // 2 System.out.println("interruption !"); t.interrupt(); }
1) est-ce que la classe thread (avec un t minuscule) est juste une faute de frappe, ou est-ce que c'est une autre classe personnelle ?
2) qu'est-ce que c'est cette classe "Syst" et que fait la méthode sleep ? en particulier, est-ce qu'elle gère correctement les exceptions d'interruption ?
Sinon, pour en revenir à ton run, je pense qu'avec un Scanner à la place de ton BufferedReader tu devrais pouvoir détecter la fermeture de la connexion avec les tests hasNext, il faut tester pour vérifier.
PS. J'ai mis en place les tests d'interruptions, c'est important, on en a déjà parlé l'autre jour dans ton autre discussion Interrompre un thread correctement.
public void run() { System.out.println("debut thread !"); URL url; try { url = new URL("http://192.168.1.1/index.cgi/"); } catch (MalformedURLException e) { e.printStackTrace(); return; } for(int a=0; a<20; a++) { if (isInterrupted()) { new InterruptedException("Interruption détectée").printStackTrace(); return; } System.out.println("a"); Scanner sc = null; try { sc = new Scanner(url.openStream()); } catch (IOException e) { e.printStackTrace(); return; } System.out.println("b"); while (sc.hasNextLine()) { if (isInterrupted()) { sc.close(); new InterruptedException("Interruption détectée").printStackTrace(); return; } System.out.println(sc.nextLine()); } System.out.println("c"); sc.close(); System.out.println("d"); } System.out.print("fin thread !"); }
mimi-bouzid
Messages postés
10
Date d'inscription
samedi 16 février 2013
Statut
Membre
Dernière intervention
17 février 2013
1
16 févr. 2013 à 22:51
16 févr. 2013 à 22:51
essaye de mettre e.Message.tostring(); dans le system.out.println de ton exception regarde le code d'erreur généré :)
Modifié par reywas le 15/02/2013 à 18:55
Pour répondre à tes question :
1. Non ce n'était pas une faute de frappe mais bien une autre classe, dont le nom était je l'admets très mal choisi. ^^
2. Oups j'avais laissé une petite coquille. En gros c'est juste un Thread.sleep(5000).
Voici le code corrigé :
Citation :
"Sinon, pour en revenir à ton run, je pense qu'avec un Scanner à la place de ton BufferedReader tu devrais pouvoir détecter la fermeture de la connexion avec les tests hasNext, il faut tester pour vérifier."
Hum le problème c'est que là dans mon exemple j'ai pris que les lignes qui étaient nécessaires pour comprendre mais j'ai besoin de mon bufferedreader. (y'a des histoires de cookies, de sessions etc)
Modifié par KX le 15/02/2013 à 19:15
Cependant le BufferedReader dispose aussi d'une méthode de test qui permet de savoir si tu es toujours en mesure de lire des données, c'est la méthode ready().
Remarque : je reprends mon code, parce qu'il prends en charge les interruptions que tu n'as pas mis en place dans ton code et qu'il est pourtant important de mettre en place puisque tu veux faire des interrupt() sur ton thread, et que leur détection doit permettre malgré tout de libérer les ressources utilisées par le thread (la connexion en particulier)