Como Finalizar Uma Thread
É primeira vez que estou trabalhando com Threads. Criei duas threads, uma para rodar o gerador de relatórios (iReport) e outra para operar uma barra de progresso (JProgressBar). No entanto, mesmo usando flag, a Thread não é terminada (state - TERMINATED), ou seja, continua no estado RUNNABLE. Vejam:
Tudo funciona, mas a tela que chama essa classe sempre vem setada com a última opção escolhida (em um JComboBox) e a barra de pregresso vem completada (100%). Como parar as Threads sem usar o depreciado stop(), pois com as flags não está funcionando? Onde estou errando?
Desde já agradeço.
package util; import java.io.InputStream; import java.sql.ResultSet; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.JProgressBar; import visao.TelaRelatorioCadastral; /** * * @author JFSJUNIOR */ public class ControlaThread{ private Thread threadBarraProgresso; private Thread threadEmissaoRelatorio; private final AtomicBoolean rodando = new AtomicBoolean(false); private JProgressBar progresso; private InputStream fluxo; private ResultSet dados; private TelaRelatorioCadastral tela; private Map param; public ControlaThread(JProgressBar barraProgresso, InputStream caminho, ResultSet resultados, TelaRelatorioCadastral telaCad, Map paramentros){ progresso = barraProgresso; fluxo = caminho; dados = resultados; tela = telaCad; param = paramentros; } public void start(){ threadBarraProgresso = new Thread(new Runnable(){ @Override public void run() { rodando.set(true); while(progresso.getValue() < 100 && rodando.get()){ try { Thread.sleep(100); progresso.setValue(progresso.getValue() + 10); } catch (InterruptedException iex) { System.out.println("ERRO: " + iex.getMessage()); } } } }); threadEmissaoRelatorio= new Thread(new Runnable(){ @Override public void run() { if(rodando.get()) GeradorDeRelatorio.gerarRelatorio(fluxo, param, dados, tela); } }); threadBarraProgresso.start(); threadEmissaoRelatorio.start(); } public void stop(){ rodando.set(false); System.out.println("Finalizado"); } }
Desde já agradeço.
João Júnior
Curtidas 0