IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Accessibilité IP avec des threads


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 33
    Par défaut Accessibilité IP avec des threads
    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 :

    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();
            }
        }
    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
    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

  2. #2
    lvr
    lvr est déconnecté
    Membre éclairé Avatar de lvr
    Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Avril 2006
    Messages
    919
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2006
    Messages : 919
    Par défaut
    J'ai une question et un souci dans ce que je lis.
    La question: quand déclenches-tu le refresh de la table ?
    Tu n'aurais pas intérêt à avoir une thread qui tous les x temps rafraîchit la table ?

    Le soucis: la mise en rouge ne me semble pas judicieusement placée.
    Tu devrais avoir ça dans le renderer.
    Pour tes adresses IP, plutôt que d'avoir une String, je mettrais plutôt une classe avec un String getAdress() et un boolean isReachable().
    Dans le renderer, tu écrirais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        if (!((IPAddress) value).isReachable()) setForeground(Color.RED);
        return this;
        }

Discussions similaires

  1. Péage avec des Threads
    Par Invité dans le forum Concurrence et multi-thread
    Réponses: 20
    Dernier message: 20/06/2007, 14h35
  2. Problème avec des threads
    Par rajuto dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 11/02/2007, 20h41
  3. Faire un sleep non blockant avec des threads
    Par mobscene dans le forum Langage
    Réponses: 7
    Dernier message: 15/12/2006, 19h31
  4. [Threads] Actions continues avec des threads
    Par MiJack dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 10/10/2005, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo