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