Bonjour,
Voici mon problème. J'ai rempli un Jtable dans lequel se trouvent des centaines d'addresses IP qui s'affichent à l'utilisateur.
J'aimerais que les addresses IP qui ne sont pas joignables s'affichent en rouge. Pour effectuer ce test, j'utilise la methode "isReachable" de la classe inetAddress de l'api java.
Ensuite, pour chaque IP je lance un thread qui va vérifier l'accessibilité de l'IP. Chacune de ces instances de Thread va se partager la ressource de mon modèle JTable afin de mettre ou non l'ip en rouge a l'intérieur de celui-ci.
Voici le code :
Et voici ma classe thread qui est en faite une classe interne se trouvant dans la meme classe parente que la méthode testAccess() ci dessus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public void testAccess() { // Vecteur de vecteurs de mon JTable où se trouve mes addresses IP Vector<Vector> vRouters = tabModelRouters.getDataVector(); for (int i=0; i<vRouters.size(); i++) { //Vecteur parcouru où je récupère l'addresse ip à l'index 1 String ipAddress = (String)vRouters.elementAt(i).elementAt(1); Reachable threadReachable = new Reachable(i,ipAddress,vRouters); threadReachable.start(); } }
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 public class Reachable extends Thread { private int index; private InetAddress ipAddress; private String test; private Vector<Vector> vRouters; public Reachable(int index, String ipAddress, Vector vRouters) { this.index = index; this.vRouters = vRouters; try {this.ipAddress = InetAddress.getByName(ipAddress);} catch(Exception e){System.out.println(e);} } public void run () { String htmlOpen = "<html><font color='red'><b>"; String htmlClose = "<b></font></html>"; // Si l'ip n'est pas accessible après 2 secondes => affichage de l'ip enrouge if(!ipAddress.isReachable(2000)) { System.out.println(ipAddress); Vector vCurrent = vRouters.elementAt(index); String element = (String)vCurrent.elementAt(0); element = htmlOpen + element + htmlClose; // Mise a jour de l'ip marquée en rouge vCurrent.set(0, element); } } }
Le souci est que cela ne marche pas car certaines IP accessibles en 600ms sont quand même affichées en rouge. De plus en relancant le programme j'obtiens des résultats complètements aléatoires.
Qqn peut-il m'apporter sa lumière ?
Merci bcp
sun
Partager