Bonsoir à tous !
J'ai une classe principale qui contient des méthodes dont une qui me sert à charger les réservations dans une jTable. J'ai une autre classe qui fonctionne en tâche de fond via un thread et qui consulte à partir d'un URL si une nouvelle réservation est arrivée.
Tout ça fonctionne très bien mais cependant j'ai un soucis que je ne sais pas résoudre et qui est le suivant :
Une fois que ma réservation est récupérée à partir de ma classe Thread comment est ce que je peux recharger ma jTable qui est dans ma classe principale ?
Actuellement, je suis obligé de fermer et réouvrir le programme pour faire cela c'est pas l'idéal.
Voici un extrait de mon code :
La classe principale :
La méthode que je veux réinvoquer pour réinitialiser ma jTable (elle se trouve dans la même classe que le code ci-dessus) :
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 static void main(String args[]) { /* On créé et affiche le formulaire */ java.awt.EventQueue.invokeLater(() -> { BuildResa fenetre; try { fenetre = new BuildResa(); fenetre.setVisible(true); fenetre.setLocationRelativeTo(null); /** On démarre le thread pour les résas auto */ CheckResaAuto resaAuto = new CheckResaAuto("BookingAuto"); resaAuto.start(); } catch (IOException | ParserConfigurationException | SAXException ex) { } }); }
Pour finir la classe qui tourne en tâche de fond :
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 /** CHARGEMENT DES DONNEES CLIENT */ @SuppressWarnings("empty-statement") private void LoadDataCustomer() throws SAXException, IOException, ParserConfigurationException{ Document document; DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); document = builder.parse(new InputSource(xmlDocCustomer)); ScanCustomer = new CustomerScanner(document); ScanCustomer.visitDocument(); listCustomer = ScanCustomer.getListClient(); /** Trie les clients */ listCustomer.sort((t1, t2) -> {return t1.getLastname().compareTo(t2.getLastname());}); listCustomer.stream().filter((client) -> (!client.getLastname().equals(""))).map((client) -> { DefaultTableModel modele3 = (DefaultTableModel)jTableClient.getModel(); Object[] obj = new Object[4]; obj[0] = client.getLastname(); obj[1] = client.getFirstname(); if(client.getType().equals("idcard")){ obj[2] = client.getId(); }else{ obj[3] = client.getId(); } modele3.addRow(obj); return modele3; }).map((modele3) -> { jTableClient.setModel(modele3); return modele3; }).forEach((_item) -> { jTableClient.repaint(); }); }
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 public class CheckResaAuto extends Thread { @Override public void run(){ while(bThreadContinu) { try { /** on marque une pause toutes les x secondes */ sleep(6000); /** URL contenant les réservations */ URL resaURL = new URL("http://www.xxx.fr/"); URLConnection uc; uc = resaURL.openConnection(); try (BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream()))) { String inputLine = in.readLine(); /** On écrit le texte qui a été récupéré dans un fichier avec pour extension en xml */ if(!inputLine.equals("NO-BOOKING")){ try { try { WriteFileTmp(inputLine); } catch (ParseException ex) { Logger.getLogger(CheckResaAuto.class.getName()).log(Level.SEVERE, null, ex); } } catch (ParserConfigurationException | SAXException ex) { Logger.getLogger(CheckResaAuto.class.getName()).log(Level.SEVERE, null, ex); } } } } catch (IOException | InterruptedException ex) { /** Arrêt du thread sur erreur */ bThreadContinu = false; } } } }
En vous remerciant d'avance à tous.
Partager