Bom dia pessoal,
Estou com um probleminha chato.
Tenho um método que tem que retornar um boolean. Dentro desse método eu faço poucas coisas:
- chamo uma thread que vai rodar o processamento e armazenar em uma variável caso dê algum erro
- retornar, de acordo com o conteúdo dessa variável, o boolean que preciso
De forma simples, algo assim:
public boolean importar(/*meus parametros estao aqui*/){
ThreadImportacao thread = new ThreadImportacao(/*passo parametros aqui*/);
(new Thread(thread)).start();
return (thread.getExecucao() == 1); // esse flag ai indica o que aconteceu durante a importação
}
public boolean importar(/* meus parametros estao aqui*/){
ThreadImportacao thread = new ThreadImportacao(/*passo parametros aqui*/);
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(thread);
executor.shutdown();
while (!executor.isTerminated())
try { Thread.sleep(1); } catch ( Exception e ) {}
executor = null;
return (thread.getExecucao() == 1);
}
O que não entendo é que isso só se eu tiver algum sistema pra esperar a thread terminar. Se eu disparar a thread direto, sem ficar aguardando seu fim, o JFileChooser funciona perfeitamente.
Eu consegui fazer um sistema, onde eu disparo a thread de importação e depois eu disparo outra thread, uma thread de espera. Ele funciona, não trava o JFileChooser, mas ai claro, eu não tenho como saber que a thread de espera terminou pra poder pegar o retorno no método. Então caio na mesma encrenca... :cry:
Alguém sabe o que acontece? Como posso resolver isso?
Grata,
Renata
