Mover barra do JProgressBar

olá galera blz

alguem sabe como eu faço pra mover o barra de carregamento de um JProgressBar , conforme o demorar de um processo que esta rodando em uma Thread separada??

será que isso é possível???

ficarei grato a quem puder me ajudar

Olá Diego tudo bem?

Bom, antes de tudo vamos ver algumas regras básicas sobre qualquer ProgressBar. Essa regra é aplicada tanto em .NET quanto em Swing/SWT, não sei quanto na web, pois nunca usei ProgressBar

todo progressBar possui os valores máximos e mínimos. Geralmente, os padrões são 0 e 100, mas você pode arrumar eles

Todo ProgressBar vai “pintando”, “preenchendo” de acordo com o “value” dele. Digamos, um ProgressBar está setado com valores 0 e 100 respectivamente para mínimo e máximo. Se o value estiver setado para 50, a barra vai ficar pintada até a metade.

Uma das formas para tu fazer ela andar é somente setando o “value”. Agora se você usa threads ou não, é de sua escolha. Se essa barra é um processo crítico (digamos, existe uma tela que, se um processo não terminar, não deve andar) daí não há necessidade de você utilizar thread, pois o programa deve focar no processo e na “rolagem” da barrinha. Agora, digamos que no seu programa faça downloads automáticos de um update e voc6e quer fazer que a barrinha se mexa quando o usuário estiver fazendo outra tarefa, daí há necessidade de uma Thread.

Alguns métodos úteis:

setMinimum( int ) //ajusta o valor mínimo, padrão 0
setMaximum( int ) //ajusta o valor máximo, padrão 100
setValue( int ) // ajusta "a posição", o "preenchimento" do JProgressBar

Espero ter ajudado :smiley:

blz Leozin!!

então cara o meu problema é o seguinte , eu quero que a barrinha do JProgressBar c mova conforme o processamento de um backup , e que quando ele acabar a barrinha esteja totalmente completa, e para isso estou sim usando Threads , mais é o seguinte eu estou usando para fazer o backup esse código

[code]//comando que executa o backup do banco postgres
ProcessBuilder builder = new ProcessBuilder(“C:\Arquivos de programas\PostgreSQL\8.1\bin\pg_dump.exe”,
“-i”, “-h” ,endIPBanco,"-p", “5432”,"-U", usuario, “-F”,“c”,"-b","-v","-f", caminhoDestino, baseDados);

    //inicia o comando
    final Process processo = builder.start();
    
    //apos iniciado o comando crai-se duas Threads que ficarão rodando pararlelamente com a Thread do backup
    //criada automaticamente acima , a Primeira Thread , é pra saber quando tremina a execução do backup
    //e a segunda é pra saber c ouve erro no mesmo
    
    //primeira Thread
    new Thread( new Runnable() {
        public void run() {
            Scanner sc = new Scanner(processo.getInputStream());
            while ( sc.hasNext() ) {
                sc.next();
            }
        }
    } ).start();
    
    //segunda Thread
    new Thread( new Runnable() {
        public void run() {
            Scanner sc = new Scanner(processo.getErrorStream());
            while ( sc.hasNext() ) {
               sc.next();
            }
        }
    } ).start();
    
    try{
        //fica aguardando pelo processo do backup
        processo.waitFor();
        processo.getErrorStream().close();
        processo.getOutputStream().close();
    }catch(Exception ex){
        
    } [/code]

então ele só sai desse método quando eu terminar o processo entendeu??

e queria saber c tem como eu encaixar o setValue() do JProgressBar , pra que ele acompanhe o tempo de demora do backup movendo-se a barrinha…

não sei c vc entendeu, e mais ou menos isso…
será que vc tem alguma idéia pra me ajudar???

Caro diego

Infelizmente isso é algo mais ligado a lógica e nem tanto ao JProgressBar, ou seja, você poderia fazer uns cálculos, do tipo:

Quantos arquivos que você irá fazer backup?
Vamos imaginar que, são, 25 arquivos que tu irá fazer backup

Vamos configurar o JProgressBar para que o mesmo seja “dinâmico”

progressBar1.setMaximum( 25 );

Então, para cada arquivo que passar, vamos aumentar o value do progressBar

int valorAtual = progressBar1.getValue();
progressBar1.setValue( ++valorAtual );

Essa parte do código você botaria num for, foreach sei lá

List meusArquivos = criadorDeBackups.getMeusArquivos();

jProgressBar1.setMaximum( meusArquivos.size() );
for( int i = 0; i < meusArquivos.size(); i++ ) {
      efetuarBackupDoArquivo( meusArquios.get( i ) );
      progressBar1.setValue( i );
}

Tu poderia alterar o valor do progressBar dentro de alguns daqueles for que lê o stream do console :stuck_out_tongue: Mas daí você teria que pensar como, pois, como citei, isso é algo mais “lógico”, não tem muito stress com o JProgressBar

Espero ter ajudado

hum sei , bom mais então vou tentar algo aqiu pra fazer isso …
muito obrigado pela dica , valew mesmo