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

Composants Java Discussion :

Affichage dynamique d'une JList dans un Thread


Sujet :

Composants Java

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Points : 112
    Points
    112
    Par défaut Affichage dynamique d'une JList dans un Thread
    Bonjour à tous,

    voici mon problème :

    J'ai un thread de type PcapPacketHandler afin de capturer les paquets véhiculant sur une des cartes réseaux choisies.
    L'affichage en console donc via un system.out.println fonctionne correctement.
    Le soucis est que lorsque je l'affiche dans une jList, il attend que la capture se finisse avant de tout afficher.
    J'ai cherché sur le net et essayé donc de créer un autre thread pour afficher dans la jList, j'ai aussi essayé avec SwingWorker mais je n'y arrive pas.

    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
     
    final DefaultListModel jListFilesModel = new DefaultListModel();
            jList2.setModel(jListFilesModel);
            setIncremente();
            packetDetail = new String [4];
            final List<PcapIf> alldevs = new ArrayList<>();
            StringBuilder errbuf = new StringBuilder();
            int r = Pcap.findAllDevs(alldevs, errbuf);
            PcapIf device = alldevs.get(getSelection());
            int snaplen = 64 * 1024;           // Capture tous les packets 
            int flags = Pcap.MODE_PROMISCUOUS; // capture tous les packets  
            int timeout = 10 * 1000;           // 10 seconds  
            final Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf);
            if (pcap == null) {
                System.err.printf("Erreur lors du commencement de la capture: " + errbuf.toString());
                return;
            }
     
            PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {
                @Override
                public void nextPacket(PcapPacket packet, String user) {
                   /* jListFilesModel.addElement("\n Received packet at " + new Date(packet.getCaptureHeader().timestampInMillis()) 
                            + "  caplen= " + packet.getCaptureHeader().caplen() 
                            + "  len = " + packet.getCaptureHeader().wirelen() 
                            + user + " \n");*/
                    packetDetail[Incremente()] = packet.toString();
     
                    jList2.addMouseListener(new MouseAdapter() {
                        @Override
                        public void mouseClicked(MouseEvent evt) {
                            JList list = (JList) evt.getSource();
                            if (evt.getClickCount() == 1) {
                                int index = list.locationToIndex(evt.getPoint());
                                setSelectPacket(index);
                                jButton3.setEnabled(true);
                            }
                        }
                    });
                    /*System.out.printf("Received packet at %s caplen=%-4d len=%-4d %s\n",
                            new Date(packet.getCaptureHeader().timestampInMillis()),
                            packet.getCaptureHeader().caplen(), // taille capturée  
                            packet.getCaptureHeader().wirelen(), user); // taille par défaut */  
                    test = "Received packet at %s caplen=%-4d len=%-4d %s\n"
                            + new Date(packet.getCaptureHeader().timestampInMillis())
                            + packet.getCaptureHeader().caplen()  
                            + packet.getCaptureHeader().wirelen()+ user;
                    System.out.println(test);
     
                }
            };
            Runnable updateList = new Runnable() {
                            @Override
    		        public void run() {
    		        	jListFilesModel.addElement("test");
    		        }
            };
            updateList.run();
            pcap.loop(4, jpacketHandler, "");
            pcap.close();

  2. #2
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Points : 112
    Points
    112
    Par défaut
    J'ai crée la variable d'instance de type String que j'ai appelé "test" et je lui affecte le paquet reçu de chaque capture puis j'ajoute "test" dans la liste depuis un autre thread

    donc pour faire plus court pour les yeux et pour centrer le prob ça donne ça :

    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
     
    PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {
                @Override
                public void nextPacket(PcapPacket packet, String user) {
                   /* jListFilesModel.addElement("\n Received packet at " + new Date(packet.getCaptureHeader().timestampInMillis()) 
                            + "  caplen= " + packet.getCaptureHeader().caplen() 
                            + "  len = " + packet.getCaptureHeader().wirelen() 
                            + user + " \n");*/
     
                    /*System.out.printf("Received packet at %s caplen=%-4d len=%-4d %s\n",
                            new Date(packet.getCaptureHeader().timestampInMillis()),
                            packet.getCaptureHeader().caplen(), // taille capturée  
                            packet.getCaptureHeader().wirelen(), user); // taille par défaut */  
                    test = "Received packet at %s caplen=%-4d len=%-4d %s\n"
                            + new Date(packet.getCaptureHeader().timestampInMillis())
                            + packet.getCaptureHeader().caplen()  
                            + packet.getCaptureHeader().wirelen()+ user;
                    System.out.println(test);
     
                }
            };
            Runnable updateList = new Runnable() {
                            @Override
    		        public void run() {
    		        	jListFilesModel.addElement("test");
    		        }
            };
            updateList.run();
            pcap.loop(4, jpacketHandler, "");
            pcap.close();

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            ...
            final DefaultListModel jListFilesModel = new DefaultListModel();
            jList2.setModel(jListFilesModel);
            ...
            final Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf); 
            ...
                return;
            }
    tu crées ta liste et tu lis des données dans le même thread

    il faudrait plutôt un truc dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            ...
            final DefaultListModel jListFilesModel = new DefaultListModel();
            jList2.setModel(jListFilesModel);
            ...
            new PacketReader(jListFilesModel, ...les infos à passer dans openLive ...).execute();
            ...
                return;
            }
    ou PacketReader est une classe qui démarre un thread ou mieux un SwingWorker

    ton appel :
    ne lance pas de thread il execute uniquement le code de la méthode run dans le thread courant

    par exemple, on peut directement faire hériter PacketReader de SwingWorker<T,V>

    T : est la classe de résultat final : comme tu veux mettre à jour ta liste au fur et à mesure tu n'en a pas besoin, mais on peut partir du principe que ça renvoit une List de packet lu,
    V : est une classe qui représente un résultat intermédiaire pour afficher au fur et à mesure (remplir ton modèle de liste au fur et à mesure)

    à priori dans ton code V serait String, mais je pense qu'il serait mieux de créer une classe qui représente ton packet lu, et la transformer en String au moment voulu, ce qui te permettra plus de souplesse
    appelons là Packet

    T sera donc une List<Packet>

    la méthode doInBackground de PackerReader :

    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
    public List<PacketRead> doInBackground() {
             final  List<PacketRead> packets = new ArrayList<PacketRead>();
         Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf); // les paramètres peuvent être passé au constructeur de PacketReader
     
     
    PcapPacketHandler<PacketRead> jpacketHandler = new PcapPacketHandler<PacketRead>() {
                @Override
                public void nextPacket(PcapPacket packet, String user) {
     
                    PacketRead packetRead = new PacketRead(packet, user);
                    packets.add(packetRead);
                    publish( packetRead );
                    return packetRead;
                }
            };
     
    pcap.loop(4, jpacketHandler, "");
            pcap.close();
             return packets ;
         }
    et la méthode process qui sera invoquée sur le thread swing en consédquence des données passées à publish(...) :

    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
    @Override
         protected void process(List<PacketRead > packets) {
            for(PacketRead read : packets ) {
     
    model.addElement(toString(read));  // ou toString(PacketRead) est la méthode qui transforme ton message en chaine finale à afficher
            }
    }
     
    protected String toString(PacketRead packet) {
     
    return ...;
     
    }
     
         }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Points : 112
    Points
    112
    Par défaut
    ouuuh la c'est pas du tout facile lorsqu'on est pas habitué aux thread :s

    j'ai créé ma classe PacketRead par rapport à ce que tu m'as dit mais j'ai des erreurs que je ne sais pas enlever :

    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
     
    import java.util.ArrayList;
    import java.util.List;
    import javax.swing.DefaultListModel;
    import javax.swing.SwingWorker;
    import org.jnetpcap.Pcap;
    import org.jnetpcap.PcapIf;
    import org.jnetpcap.packet.PcapPacket;
    import org.jnetpcap.packet.PcapPacketHandler;
     
    public class PacketRead extends SwingWorker<PacketRead, PacketRead> {
     
        private List<PcapIf> alldevs;
        private StringBuilder errbuf;
        private int r;
        private PcapIf device;
        private int snaplen;           // Capture tous les packets 
        private int flags; // capture tous les packets  
        private int timeout;           // 10 seconds  
        private PcapPacket packet;
        private String user;
        DefaultListModel jListFilesModel;
     
        public PacketRead(DefaultListModel jListFilesModel,PcapPacket packet, String user) {
            alldevs = new ArrayList<>();
            errbuf = new StringBuilder();
            r = Pcap.findAllDevs(alldevs, errbuf);
            device = alldevs.get(1);
            snaplen = 64 * 1024;
            flags = Pcap.MODE_PROMISCUOUS;
            timeout = 10 * 1000;
            this.jListFilesModel = jListFilesModel;
        }
     
        public PacketRead(PcapPacket packet, String user) {
            this.packet = packet;
            this.user = user;
        }
     
        @Override
            public List<PacketRead> doInBackground() {
            final List<PacketRead> packets = new ArrayList<>();
            Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf); // les paramètres peuvent être passé au constructeur de PacketReader
     
            PcapPacketHandler<PacketRead> jpacketHandler = new PcapPacketHandler<PacketRead>() {
                public PacketRead nextPacket(PcapPacket packet, String user) {
     
                    PacketRead packetRead = new PacketRead(packet, user);
                    packets.add(packetRead);
                    publish(packetRead);
                    return packetRead;
                }
     
            };
     
            pcap.loop(4, jpacketHandler, "");
            pcap.close();
            return packets;
        }
     
        @Override
            protected void process(List<PacketRead> packets) {
            for (PacketRead read : packets) {
     
                jListFilesModel.addElement(toString(read));  // ou toString(PacketRead) est la méthode qui transforme ton message en chaine finale à afficher
            }
        }
     
        protected String toString(PacketRead packet) {
     
            return packet.toString();
     
        }
     
    }
    à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PcapPacketHandler<PacketRead> jpacketHandler = new PcapPacketHandler<PacketRead>()
    on me demande de créer les méthodes abstraites (j'utilise Netbeans) et lorsque je le fais automatiquement cela créé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Override
                public void nextPacket(PcapPacket pp, PacketRead t) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    Je suis plus trop ce que je fais mais j'ai changer cette erreur en ça pour que ça n'affiche plus d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    pcap.loop(4, jpacketHandler, "");
    // changer en ...
    pcap.loop(4, jpacketHandler, this);
    Ensuite, au niveau de la signature de la classe, il met met une erreur disant comme quoi il fallait aussi ajouter des méthodes abstraites et lorsque je le fais il ajoute cela mais l'erreur reste encore et la même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Override
        protected PacketRead doInBackground() throws Exception {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    Jsuis un peu perdu, dire que le programme fonctionne correctement en console et c'est la misère juste pour l'afficher en interface graphique

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oups , au temps pour moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     public PacketRead nextPacket(PcapPacket packet, String user) {
     
                    PacketRead packetRead = new PacketRead(packet, user);
                    packets.add(packetRead);
                    publish(packetRead);
                    return packetRead;
                }
    quand j'ai vu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>()
    j'ai cru que la méthode nextPacket devait renvoyer un objet de la classe paramétrée

    en fait cette méthode est void (du coup je ne sais pas qu'est ce c'est que ce paramètre).
    du coup, netbeans te signal qu'il manque la méthode
    public void nextPacket(PcapPacket packet, String user)

    donc remplace cette méthode par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public void nextPacket(PcapPacket packet, String user) {
     
                    PacketRead packetRead = new PacketRead(packet, user);
                    packets.add(packetRead);
                    publish(packetRead); 
                }
    et enlève celle qu'il t'a ajouté automatiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @Override
                public void nextPacket(PcapPacket pp, PacketRead t) {
                    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
                }
    d'ailleurs en voyant la signature, le paramètre concerne en fait le second argument de la méthode :

    il faut en plus donc écrire à la palce de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PcapPacketHandler<PacketRead> jpacketHandler = new PcapPacketHandler<PacketRead>() {
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    au sujet de ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @Override
        protected PacketRead doInBackground() throws Exception {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }
    j'ai fait une autre erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class PacketReader extends SwingWorker<List<PacketRead>,PacketRead>
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Points : 112
    Points
    112
    Par défaut
    Nickel, un grand merci à toi

    J'ai un autre petit soucis, c'est que je n'arrive pas à stopper le process.
    Je met l'entier en paramètre à une valeur "infini" pour qu'il y ait un grand nombre de boucle et donc de capture.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pcap.loop(999999999, jpacketHandler,"");
    J'ai créé une variable d'instance StartStop qui quand elle reçoit 0, elle fait un pcap.breakloop() et pcap.close().
    Mais ça ne l'arrête pas...

    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
     
    @Override
        public List<PacketRead> doInBackground() {
            final List<PacketRead> packets = new ArrayList<>();
            Pcap pcap = Pcap.openLive(device.getName(), snaplen, flags, timeout, errbuf); // les paramètres peuvent être passé au constructeur de PacketReader
            if (pcap == null) {
                System.err.printf("Erreur lors du commencement de la capture: " + errbuf.toString());
            }
            PcapPacketHandler<String> jpacketHandler = new PcapPacketHandler<String>() {
                @Override
                public void nextPacket(PcapPacket packet, String user) {
                    PacketRead packetRead = new PacketRead(packet, user);
                    packets.add(packetRead);
                    publish(packetRead); 
                }
            };
            if(StartStop == 0){
                System.out.println(StartStop);
                pcap.breakloop();
                pcap.close();
            }
            pcap.loop(999999999, jpacketHandler,"");
            return packets;
        }
    J'ai mis un System.out.print de StartStart pour voir si il reçoit bien 0 lorsque je clique sur Stop et oui il le reçoit bien.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    a mon avis le problème est là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if(StartStop == 0){
                System.out.println(StartStop);
                pcap.breakloop();
                pcap.close();
            }
            pcap.loop(999999999, jpacketHandler,"");
    tu testes StartStop avant de démarrer ta boucle puis tu lances ta boucles : elle ne s'arrêtera donc que lorsqu'elle aura atteint le compte de 999999999...

    ce que tu peux faire c'est déclarer la variable Pcap pcap comme variable membre de la classe PacketReader

    et tu crées ta méthode d'arret dans PacketReader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void stopLoop() {
       if ( pcap!=null ) {
            pcap.breakloop();
       }
    }
    par contre je ne suis pas sur de la position de l'appel pcap.close() : il faudrait que j'ai la doc de cette classe ou son source

    à mon avis en toute logique il faudrait le mettre après l'appel du loop(99999999....)

    je suppose que le breakLoop() ne fait que rendre la main de l'appel de loop(..)
    ainsi juste après avoir rendu la main, il faut faire pcap.close()
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Février 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2012
    Messages : 149
    Points : 112
    Points
    112
    Par défaut
    Merci à toi, c'est parfait


    Passe une excellente journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/03/2010, 15h22
  2. Affichage dynamique d'une requete Access dans Excel
    Par alex830001 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 18/06/2008, 17h54
  3. Création d'une Form dans un thread (form dynamique)
    Par franco263 dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/06/2007, 18h33
  4. Charger une image dans un thread
    Par KRis dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2005, 18h36
  5. [MFC] Faire une pause dans un thread
    Par Kevgeii dans le forum MFC
    Réponses: 3
    Dernier message: 21/02/2005, 12h49

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