Busca de arquivos usando Thread

Galera estou procurando arquivos em um diretório usando thread , mas acontece que quando eu colocar no diretório raiz no caso o C:\ no Win se o arquivos estiver em um diretório muito profundo exemplo no Desktop top ele não acha

Classe com método de leitura

package TAREFAS;

import java.io.File;
import java.util.ArrayList;
import java.util.concurrent.Executor;

public class ProcuraArquivoComThread implements Runnable {
        private static boolean achou;
	private File pasta;
	private String arquivo;
	private Executor pool;

	public ProcuraArquivoComThread(File pasta, String arquivo, Executor pool) {
		this.pasta = pasta;
		this.arquivo = arquivo;
		this.pool = pool;
	}
	public static void procura(String pasta, String arquivo, Executor pool) {
		achou = false;
		pool.execute(new ProcuraArquivoComThread(new File(pasta), arquivo, pool));
	}
        

	public void run() {
		if(achou){
			return;
		}

		for(File f : pasta.listFiles()){
			if(achou){
				break;
			} else if(f.isDirectory()){
				pool.execute(new ProcuraArquivoComThread (f, arquivo, pool));                               
			} else if(f.getName().equalsIgnoreCase(arquivo)){
                                GUI.GuiPrincipal.caminho = f.getAbsolutePath();
				achou = true;                                
				break;
			}
		}
	}

}

E aqui a interface

public void procurarArquivo() throws InterruptedException {
        String pasta = JOptionPane.showInputDialog("Digite o diretorio da onde a busca deve iniciar");
        if(!pasta.equals("") && pasta != null){
            String arquivo = JOptionPane.showInputDialog("Digite o nome do arquivo a ser lido e sua extensão");
            if(!arquivo.equals("") && arquivo != null){
                ScheduledExecutorService threadpool = Executors.newScheduledThreadPool(4);

                ProcuraArquivoComThread.procura(pasta, arquivo, threadpool);
                int quantidadeDeTentativas=0;
                int esc = JOptionPane.showConfirmDialog(this, "Procurando arquivo...", "Busca de arquivo", JOptionPane.OK_CANCEL_OPTION);

                do{
                    if(esc == JOptionPane.CANCEL_OPTION){
                        break;
                    }
                    if(quantidadeDeTentativas > 5000){
                        //JOptionPane.showMessageDialog(this, "Arquivo não encontrado");
                        break;
                    }
                    quantidadeDeTentativas++;
                } while(caminho==null);

                threadpool.shutdown();

                if(esc != JOptionPane.CANCEL_OPTION){
                    gerarPainel(new File(caminho));
                    caminho = null;
                }
            } else{
                JOptionPane.showMessageDialog(this, "Digite o nome do arquivo");
            }
        } else {
            JOptionPane.showMessageDialog(this, "Digite o caminho do diretorio");
        }
    }
String pasta = JOptionPane.showInputDialog("Digite o diretorio da onde a busca deve iniciar");

nessa hora o que vc digita??

eu passa o diretório e em seguida em passo o arquivo com a extensão