Bonjour, j'ai beau chercher, je ne trouve pas comment faire.
Il s'agit d'une recherche de fichiers dans une arborescence, voici le bout du code incriminé :
Code :
- ...
- public void search() {
- mainThread = new SearchThread(root);
- mainThread.start();
- try { mainThread.join(); }
- catch (InterruptedException e) { e.printStackTrace(); }
- }
- class SearchThread extends Thread {
- protected FileSystemModel root = null;
- public SearchThread(FileSystemModel root) { super(); this.root = root; }
- public void run() {
- int nbChildren = root.getChildCount(root.getRoot());
- for (int i = 0; i < nbChildren; i++) {
- File f = ((File) root.getChild(root.getRoot(), i));
- if (f.isFile()) { // On a un fichier
- if (f.getName().matches(".*" + pattern + ".*" ))
- addResult(f.getAbsolutePath());
- } else { // On a un répertoire, on fait une recherche dedans
- String s = f.getAbsolutePath();
- new SearchThread(new FileSystemModel(s)).start();
- }
- }
- }
- }
|
Or, là, il quitte rapidement la méthode search(), c'est normal car le thread principal (celui qui analyse l'arborescence directe du noeud root) s'est terminé. Or, ses fils continuent eux de fonctionner. Je voudrai que le mainThread rende la main quand tous ses fils soient terminés, mais je n'y arrive pas. Cependant, lors de la création d'un thread fils (quand on tombe sur un répertoire quoi), je ne veux pas que le parent direct attende son fils, utiliser des threads perdrait tous son sens.
Y'a t il une solution, ou dois je faire en séquentielle pour ne pas avoir de problème ?
Merci.
Message édité par andOceans le 14-10-2004 à 19:06:56