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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 confirmé
    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
    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();

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/03/2010, 14h22
  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, 16h54
  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, 17h33
  4. Charger une image dans un thread
    Par KRis dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2005, 17h36
  5. [MFC] Faire une pause dans un thread
    Par Kevgeii dans le forum MFC
    Réponses: 3
    Dernier message: 21/02/2005, 11h49

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