Bonjour,
je reviens vers vous à nouveau car j'ai un problème.
comme l'indique le titre je voudrais qu'un Thread attend la fin d'un autre.
je m'explique :
j'ai une fonction d'extraction d'archives qui est lancée depuis un thread :
Code JAVA : 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 public synchronized void extraireToutZip() { byte[] buffer = new byte[1024]; try { final Collection<File> all = new ArrayList<File>(); findFilesRecursively(new File("C:\\Users\\moi\\Desktop\\bilans batch satelit 2016"), all, ".zip"); for (File file : all) { System.out.println(file.getName()); ZipInputStream zis = new ZipInputStream(new FileInputStream(file)); ZipEntry ze = zis.getNextEntry(); while (ze != null) { String fileName = ze.getName(); File newFile = new File(file.getParentFile() + File.separator + fileName); // je vérifie si le fichier existe déjà pour ne pas l'extraire à nouveau while (!newFile.getAbsoluteFile().exists()) { System.out.println("Extraction du fichier : " + newFile.getAbsoluteFile()); if (ze.isDirectory()) { String temp = newFile.getCanonicalPath(); new File(temp).mkdir(); } else { FileOutputStream fos = new FileOutputStream(newFile); int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fos.close(); } break; } /*else { System.out.println("Déjà extraite !"); break; }*/ ze = zis.getNextEntry(); } zis.closeEntry(); zis.close(); System.out.println("Extraction complétée"); } } catch (IOException ex) { ex.printStackTrace(); } }
et une fonction qui lis les fichiers extraites, lancée depuis un Thread aussi:
Code JAVA : 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 public synchronized void lireTout() throws IOException { ArrayList<String> allFiles = new ArrayList<String>(); listeRepertoire(new File("C:\\Users\\moi\\Desktop\\bilans batch satelit 2016"), allFiles); try { File f; FileReader fr; BufferedReader br; for (String file : allFiles) { f = new File(file); fr = new FileReader(f); br = new BufferedReader(fr); System.out.println(f.getAbsolutePath()); String ligne = br.readLine(); while (ligne != null) { //System.out.println(ligne); ligne = br.readLine(); } // ligne = br.readLine(); br.close(); fr.close(); } } catch (IOException exception) { System.out.println("Erreur lors de la lecture : " + exception.getMessage()); } }
j'ai jamais fais de Thread du coup j'ai suivi le tuto http://viennet.developpez.com/cours/java/thread/
du coup dans le controller je fais :
j'ai tout essayé mais je sais pas quoi faire
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 protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //j'extraie depuis un Thread pour que l'extraction se lance en asynchrone ThreadZip tZip = new ThreadZip(); ThreadFichier tFichier = new ThreadFichier(); tZip.start(); while(tZip.getState().equals("RUNNABLE")) { try { tFichier.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } tFichier.start(); }
je voudrais que tFichier attend jusqu'à que tZip ait fini![]()
Partager