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