Como Finalizar Uma Thread

Java

Thread

19/07/2019

É 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:

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");
    }
}
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.
João Júnior

João Júnior

Curtidas 0
POSTAR