Estou tentando fazer uma barra de progresso mas não estou tendo sucesso.
Tentei exibir uma janela com uma jprogressbar mas ela só aparece depois que processou as informações, mesmo se colocar a abertura do frame
antes do processamento.
Tentei com threads e não consegui também (não atualiza a janela).
Tentei colocar um componente na tela e também ficou congelada enquanto processava.
Enfim, tentei de várias formas.
Estou com JDK 1.5 (falo isso porque procurei e encontrei uma forma nos tutoriais da Sun mas eu só poderia implementar com jdk 1.6)
Não tenho tempo pra mudar todo o layout das telas, que fiz com o 1.5.
Alguma sugestão ?
rodrigo.bossini
Acho que isso aqui já ajuda:
importjavax.swing.*;importjava.util.*;publicclassTestextendsJFrame{publicstaticvoidmain(String[]args){Testtest=newTest();Test.AtualizaTelaatualizador=test.newAtualizaTela();Test.GeraNumerogera=test.newGeraNumero();Threadt1=newThread(atualizador);Threadt2=newThread(gera);t2.start();t1.start();}classAtualizaTelaimplementsRunnable{publicvoidrun(){while(bar.getValue()<100000){bar.setValue(bar.getValue()+numero);Thread.yield();}System.out.print("fim atualiza");//usei só pra testes }}classGeraNumeroimplementsRunnable{publicvoidrun(){while(bar.getValue()<100000){numero=gerador.nextInt(2);Thread.yield();}}}publicTest(){bar=newJProgressBar(0,100000);gerador=newRandom();numero=0;this.add(bar);this.pack();this.setVisible(true);this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);}JProgressBarbar;Randomgerador;intnumero;}
Ainda tá faltando sincronizar as threads, obviamente você não pode simplesmente confiar no comportamento do yield.
RichardVaugh
Legal o exemplo, vou fazer uns testes aqui.
Obrigado !
rodrigo.bossini
RichardVaugh:
Legal o exemplo, vou fazer uns testes aqui.
Obrigado !
Depois nos conte se serviu para o que vc precisava e poste possíveis melhoramentos que vc fizer!
Abraço!
E
el2004el
como funciona JProgressBar?
o tempo é determindo pelo programador?
porque o tempo de atualização do sistema ou um backup depende da velocidade da máquina.
como seria esse gerenciamento de tempo? para que a barra nao termine antes do processo.
D
diogobra
Pelo que entendi de sua dúvida. O único modo de atualizar a barra de progresso e fazer uma tarefa ao mesmo tempo é com o uso de Threads.
Sem uso de Threads sempre a barra de progresso irá atualizar toda de vez no fim.
Crie uma classe que implemente a interface Runnable e use uma Thread. Ou então crie uma classe que herde da classe Thread.
Já testei implementando Runnable e tudo ocorreu corretamente. Barra de progresso atualizando concorrentemente com um método para cópia de um arquivo.
Espero que tenha ajudado.
Vlw
root_
SE VC TIVER FAZENDO ALGO, COMO POR EXEMPLO:
intx=5000;for(inti=0;i<x;i++){progress=(100*(i+1))/x;jProgressBar1.setValue(progress);// a Manha ta aki logo abaixo.jProgressBar1.getUI().update(jProgressBar1.getGraphics(),jProgressBar1);Thread.sleep(250);}
Sem usar THREADS… apenas use: jProgressBar1.getUI().update(jProgressBar1.getGraphics(), jProgressBar1); q ta tudo ok!
Espero ter ajudado… pois ja precisei muito do jProgress de forma simples, pratica e rapida!
rodrigo.bossini
root_:
SE VC TIVER FAZENDO ALGO, COMO POR EXEMPLO:
intx=5000;for(inti=0;i<x;i++){progress=(100*(i+1))/x;jProgressBar1.setValue(progress);// a Manha ta aki logo abaixo.jProgressBar1.getUI().update(jProgressBar1.getGraphics(),jProgressBar1);Thread.sleep(250);}
Sem usar THREADS… apenas use: jProgressBar1.getUI().update(jProgressBar1.getGraphics(), jProgressBar1); q ta tudo ok!
Espero ter ajudado… pois ja precisei muito do jProgress de forma simples, pratica e rapida!
Legal, dessa não sabia. Sempre que precisei de uma progress bar, utilizei a classe SwingWorker do java 6 pra fazer o processamento.
altitdb
root_:
SE VC TIVER FAZENDO ALGO, COMO POR EXEMPLO:
intx=5000;for(inti=0;i<x;i++){progress=(100*(i+1))/x;jProgressBar1.setValue(progress);// a Manha ta aki logo abaixo.jProgressBar1.getUI().update(jProgressBar1.getGraphics(),jProgressBar1);Thread.sleep(250);}
Sem usar THREADS… apenas use: jProgressBar1.getUI().update(jProgressBar1.getGraphics(), jProgressBar1); q ta tudo ok!
Espero ter ajudado… pois ja precisei muito do jProgress de forma simples, pratica e rapida!
Desse seu jeito muito mais facil, valeu cara!!
Tava me matando com as Threads aqui!!