[FECHADO]Ajuda por favor! barra de progresso

Pessoal seguinte, estou trabalhando num projeto aqui na empresa, onde pego os arquivos do banco teradata e crio o txt através de um select, até aqui tudo bem!?
Mas gostaria de fazer o seguinte, ao executar essa classe ele me desse de ulguma forma a porcetagem do processamento, ou uma barra de progresso desse processamento, como fazer isso?! vou postar minha classe aqui para que vocês possam me ajudar e entender melhor!



import java.beans.Statement;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author daniel
 */
public class testeb {

    private static java.sql.Statement st;
    private static int dt_inicio = 20110227;
    private static int dt_fim = 201010;
    private static ResultSet rs;

    public static void main(String[] args) throws ClassNotFoundException, FileNotFoundException, SQLException {


        try{

               Class.forName("oracle.jdbc.OracleDriver");
                    Connection con=  DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl11g","xxxxxx","*****");
                    System.out.println("CONECTADO!!!!!");

            st = con.createStatement();

            ResultSet rs = st.executeQuery("select * from system.parque_trafego_"+dt_inicio+" where conta = "+dt_fim+" and cod_subtp_produto_comercial = 'LINA'");

DateFormat h = new SimpleDateFormat("hh:mm:ss");

            short inicio2 = (short) ((short) System.currentTimeMillis());

                   File file = new File("C:/Users/daniel/Documents/NetBeansProjects/textoBanco/src/arquivo2.txt");
                    PrintWriter pw = new PrintWriter(file);
                    while(rs.next()){
                    pw.printf("%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s\n",
                            rs.getString("sistema"),
                            rs.getString("id_conta"),
                            rs.getString("cod_subtp_produto_comercial"),
                            rs.getString("vl_dlc"),
                            rs.getString("qt_dlc"),
                            rs.getString("qt_sgndo_dlc"),
                            rs.getString("vl_chmda_local"),
                            rs.getString("qt_chmda_local"),
                            rs.getString("qt_sgndo_chmda_local"),
                            rs.getString("conta"),
                            rs.getString("produto_comercial"),
                            rs.getString("terminal"),
                            rs.getString("teste"),
                            rs.getString("valor"));


      System.out.printf("%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s;%s\n",
                            rs.getString("sistema"),
                            rs.getString("id_conta"),
                            rs.getString("cod_subtp_produto_comercial"),
                            rs.getString("vl_dlc"),
                            rs.getString("qt_dlc"),
                            rs.getString("qt_sgndo_dlc"),
                            rs.getString("vl_chmda_local"),
                            rs.getString("qt_chmda_local"),
                            rs.getString("qt_sgndo_chmda_local"),
                            rs.getString("conta"),
                            rs.getString("produto_comercial"),
                            rs.getString("terminal"),
                            rs.getString("teste"),
                            rs.getString("valor"));




    }
    pw.flush();
        short fim = (short) ((short) System.currentTimeMillis());

                                    System.out.println("Tempo corrido : " +(fim-inicio2)/180/100+ "m");
    pw.close();


            }catch(SQLException e){
                e.printStackTrace();
            }
      }
  }

grato a todos que puderem colaborar

Teu rs tem o total de registros.

Coloque um contador no teu while e você terá os 2 valores min e max para uma barra de progresso.

Daí basta atualizar a barra a cada volta do while.

Não tem nenhum segredo nisso,

O que ocorre as vezes,é que o processo gira tão rapido que a tela não tem tempo de atualizar.

Então teria de colocar uma thread para fazer isso.

Lembre, é claro, que essa barra vai tomar algum tempo do teu processamento. Você tá parando
a cada linha para movimentar uma barra visual, São essas purpurinas que acabam comendo
energia e processamento.

Mas se querem e o processo é tão longo que precisa ser acompanhado…

Já vi muitas vezes pedirem isso e ninguém nem olha pra barra depois de algumas vezes.

Valeu Joao, eu sei que o pessoal nao olha mesmo , mas sabe como é né !!

Só nao sei implementar o que vc falou, ainda nao cheguei nas thread, poderia me ajudar!!?

A razão para a thread existir não tem nada a ver com a velocidade do processo.
Você precisa da thread porque enquanto seu listener de botão estiver processando, o Swing não irá atualizar a pintura da tela.

Isso porque o código que faz o processamento de botão e a pintura é o mesmo.

Quanto a como montar seu JProgressBar, leia os tutoriais da própria Sun:
http://download.oracle.com/javase/tutorial/uiswing/components/progress.html
http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

valeu gente, obrigado