[RESOLVIDO] JProgressBar para medir o progresso de somente um método

Olá, apesar de parecer uma dúvida simples, não encontrei uma resposta em lugar nenhum, preciso implementar um JProgressBar que meça o tempo de progresso de somente um método, no caso, um método que irá realizar o FTP de um arquivo. Como devo fazer pra conseguir implementar esse progress bar? Através de Threads? Pesquisei na documentação do Java e não compreendi muito bem o exemplo de uso, pois sou iniciante em programação.

Se alguém puder me esclarecer como fazer isso, eu agradeço desde já.

http://www.velocityreviews.com/forums/t622513-ftpclient-and-copystreamadapter-stop-sometimes.html é um exemplo de como se pode acompanhar o progresso de uma transferência via FTP.

Onde está escrito “changeSupport.firePropertyChange(FTPPERCENT, null,
totalBytesTransferred*100/length);”, você precisa pegar seu controle JProgressBar, e passar o progresso.

A operação de FTP deve ser executada em uma thread separada da thread do Swing.

Olá, agradeço sua sugestão e consegui me guiar para uma solução através dela. O que eu utilizei para criar a barra foram duas classes:

CopyStreamAdapter - Do Apache Commons net, é usada como listener da operação FTP realizada, chama o método bytesTransferred cada vez que algum dado é transferido.

SwingWorker - Do pacote Swing, cria uma Thread automaticamente bastando digitar todo o código que você pretende inserir em uma Thread.

Abaixo, segue o código:

FTPClient ftpc = new FTPClient();

java.io.File f = new java.io.File("/home/yasser/teste.jpg");
//Arquivo para upload


java.io.FileInputStream fis = new java.io.FileInputStream(f);
//Cria um FileInputStream para realizar o upload com o storeFile de FTPClient

//Realiza operações de conexão e login FTP...

CopyStreamAdapter streamListener = new CopyStreamAdapter() {
            @Override
            public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) {
                //this method will be called everytime some bytes are transferred
                //Esse método é chamado sempre que houver uma transferência de dados

                int percent = (int) (totalBytesTransferred * 100 / f.length());
                //Cálculo para arredondar o valor para inserir na barra de progresso

                jProgressBar1.setValue(percent);
                //Inserindo valor na barra de progresso
            }
        };

ftpc.setCopyStreamListener(streamListener);
//Adiciona o listener ao FTPClient

//Cria um SwingWorker
SwingWorker sw = new SwingWorker(){

            //Dentro deste método fica tudo que precisa ser executado em outra Thread
            protected Object doInBackground() throws Exception {


                jButton1.setEnabled(false);
                ftpc.storeFile(f.getName(),fis);
            }

            //Neste método ficará todo o código a ser executado no final da execução do doInBackground();
             protected void done() {
                jProgressBar1.setValue(0);
                System.out.println("Feito...");
                jButton1.setEnabled(true);

            }
        };

        //Executa o SwingWorker
        sw.execute();