Bonjour à tous,

Je suis actuellement en train de développer une petite application swing qui se connecte à une URL, récupère la réponse puis lit son contenu.
J'utilise donc un Thread qui effectue certains traitements, et qui appelle un moment donné la méthode suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 
public void postURL (String a_Url, Alerte a)
	{
		logger.info("Récupération de la liste des liens. URL:" + a_Url.toString());
 
		// Récuperation du saut de ligne
		@SuppressWarnings("unused")
		String o_sLineSep = null;
		try
		{
			o_sLineSep = System.getProperty("line.separator");
		}
		catch (Exception e)
		{
			o_sLineSep = "\n";
		}
 
		BufferedReader reader = null;
 
		try {
 
			URL url = new URL(a_Url);
			URLConnection connection = url.openConnection();
			logger.debug("Connection à l'URL de la page");
			reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
			logger.debug("Lecture de la réponse.");
 
			boolean take = false;
			page_suivante = "FIN";
 
			logger.debug("Début d'extraction des liens de la page.");
 
			String line;
			while ((line = reader.readLine()) != null) {
 
				// Dés que l'on rencontre cette balise dans la réponse, on indique que l'on extraira les lignes suivantes
				if (line.contains("<div class=\"list-link\">")) {
					take  = true;
					logger.debug("Balise list-link trouvée.");
				}
 
				// Dés que l'on rencontre cette balise dans la réponse, on indique que l'on n'extraira plus les lignes suivantes
				if (line.contains("<div class=\"list-img\">")) {	
					take  = false;
					logger.debug("Balise list-img trouvée.");
				}
 
				// Dés que l'on rencontre cette balise dans la réponse (url de la page suivante), initialise la variable 
				if (line.trim().contains(">Page suivante</a>")) {
 
					logger.debug("Balise page suivante trouvée.");
					page_suivante = HTMLEntities.unhtmlentities(line.trim()).split("\"")[1];
 
				}
 
				// Suivant la variable take vue plus haut on créé ou non un objet Lien que l'on ajoute dans la liste des liens
				if (take) {
 
					if (line.trim().contains("<a href=")) {
 
						Link leLien = new Link(HTMLEntities.unhtmlentities(line.trim()).split("\"")[1].split("/")[4].split(".htm")[0],HTMLEntities.unhtmlentities(line.trim()).split("\"")[3], HTMLEntities.unhtmlentities(line.trim()).split("\"")[1]);
						listLiens.add(leLien);
						logger.debug("Extraction du lien: " + HTMLEntities.unhtmlentities(line.trim()));
					}
 
				}
 
			}
 
			logger.debug("Fin d'extraction des liens de la page.");
 
		} catch (IOException e) {
 
			logger.error("Erreur dans la lecture de la réponse HTTP.");
			a.setStatut("Erreur dans la lecture de la réponse HTTP.");
			page_suivante = "FIN";
			((MainWindows)parent).updateFillTable();
 
		} catch (Exception e) {
 
			logger.error("Erreur inconnue dans la lecture de la réponse HTTP: " + e.getMessage());
			a.setStatut("Erreur inconnue dans la lecture de la réponse HTTP: " + e.getMessage());
			page_suivante = "FIN";
			((MainWindows)parent).updateFillTable();
 
		}
		finally {
 
			if (reader != null) {
				try {
					reader.close();
				} catch (IOException e) {
 
					logger.error("Erreur dans la fermeture de la réponse HTTP.");
					a.setStatut("Erreur dans la fermeture de la réponse HTTP.");
					page_suivante = "FIN";
					((MainWindows)parent).updateFillTable();
				}
			}
 
		}
 
	}
Mon thread effectue les traitements puis attend 30 min, puis réexécute les traitements puis attend 30min etc.

Mon code marche plutôt pas mal, sauf que parfois il se bloque au niveau de la boucle du readLine(). Aucune exception n'est levée, ce qui est gênant car le traitement est totalement bloqué.
Je précise que le phénomène est aléatoire (parfois l'application fait 10, parfois 18 itérations sans problème).

J'ai cru comprendre sur le net que readLine() pouvait être bloquant car les informations arrivent au compte goute. Ceci étant dit, je n'ai pas réussi à comprendre pourquoi ca bloqué. (pb de connexion lente?).

Comment puis-je éviter ce problème? En utilisant autre chose que BufferedReader pour lire la réponse? (pour info je dois lire la réponse ligne par ligne).

Merci beaucoup pour votre aide.