Re:SwingWorks como calcular tempo de um método para a progress bar?
2 respostas
V
ViniGodoy
O JProgressBar não funciona por tempo. Você deve contar quantas tarefas seu método executa, e fazer com que ele aumente o contador do JProgressBar a cada tarefa.
Por exemplo, se você que um JProgressBar para ao método validarIntegridadeListaArquivosSistema, você terá que fazer com que esse método:
Primeiro conte quantos arquivos ele vai validar. Isso será o maximum value da sua JProgressBar;
A cada arquivo, atualize a informação do JProgressBar que aquele arquivo foi contado.
Olá pessoal estou necessitando fazer uma tela de Splash que tenha 1 progressbar, a mesma irá calcular o tempo total em porcentagem, das tarefas.
Estou usando SwingWorks para isto.
Essa é a parte que irá executar as tarefas
/** * * @author CGN * */classTaskextendsSwingWorker<Void,Void>{/* * Main task. Executed in background thread. */@OverridepublicVoiddoInBackground(){Randomrandom=newRandom();intprogress=0;//Initialize progress property.setProgress(0);//Sleep for at least one second to simulate "startup".try{Thread.sleep(1000+random.nextInt(2000));}catch(InterruptedExceptionignore){}while(progress<100){//Sleep for up to one second.try{Thread.sleep(random.nextInt(1000));}catch(InterruptedExceptionignore){}try{// Verifica se todos os arquivos do sistema estão na pasta raiz e integros.obterInstancia().getjLabelTextoDinamicoPlugins().setText("Verificando integridade dos arquivos do sistema.); long inicio = System.currentTimeMillis(); GerenciadorArquivo.obterInstancia().validarIntegridadeListaArquivosSistema(); long fim = System.currentTimeMillis(); long tempo = (fim - inicio); System.out.println( fim - inicio ); tempo = (long) (tempo * (Math.pow(10, -3))); System.out.println(tempo); // Verificar idioma seleciona pelo usuário para utilização no sistema. // Verificar se o banco de dados esta integro tal como todas as tabelas e conteudos das mesmas. // Verifica se a licença de uso o usuário esta valida para utilização. //FachadaNegocioLicenciamento.obterInstancia().verificarLicenca(); } catch (InfraEstruturaExcessao infra) { infra.printStackTrace(); } //Make random progress. progress += random.nextInt(10); setProgress(Math.min(progress, 100)); } return null; }
Esta e a parte que imprime no splash o tempo da progress bar
/** * Invoked when task's progress property changes. */publicvoidpropertyChange(PropertyChangeEventevt){if("progress"==evt.getPropertyName()){intprogress=(Integer)evt.getNewValue();getProgressBar().setIndeterminate(false);getProgressBar().setValue(progress);taskOutput.append(String.format("Verificado %d%% da tarefa.\n",progress));if(getProgressBar().getValue()==getProgressBar().getMaximum()){fecharSplash();if(FachadaNegocioLicenciamento.obterInstancia().exibirLicenciamento()){FrmLicenciameto.obterInstancia().exibirFrmLicenciameto();}else{if(FachadaNegocioAtualizacao.obterInstancia().exibirAtualizacao()){FrmAtualizacao.obterInstancia().exibirFrmAtualizacao();}else{FrmMenuScylla.obterInstancia().exibirFrmMenuScylla();}}}
C
Cleo_Nascimento
Opa Godoy a idéia é exatamente essa pos sinal você mesmo respondeu, pois agora que tenho o tempo de execução posso obter isso em uma regra de 3 simples a porcentagem e ir incrementando o progress bar a cada avanço das tarefas executadas.
Bom agradeço-lhe mais uma vez pela outra dica foi de muita valia vou por esse aqui também como resolvido!