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