Re:SwingWorks como calcular tempo de um método para a progress bar?

2 respostas
V

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:

  1. Primeiro conte quantos arquivos ele vai validar. Isso será o maximum value da sua JProgressBar;
  2. A cada arquivo, atualize a informação do JProgressBar que aquele arquivo foi contado.

Para que tudo funcione bem, o método validarIntegridadeListaArquivosSistema é que será rodado no seu SwingWorker. Para mais informações:
http://java.sun.com/products/jfc/tsc/articles/threads/threads2.html
http://download.oracle.com/javase/tutorial/uiswing/components/progress.html

2 Respostas

C

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
     *
     */
    class Task extends SwingWorker<Void, Void> {
        /*
         * Main task. Executed in background thread.
         */
        @Override
        public Void doInBackground() {
            Random random = new Random();
            int progress = 0;
            //Initialize progress property.
            setProgress(0);
            //Sleep for at least one second to simulate "startup".
            try {
                Thread.sleep(1000 + random.nextInt(2000));
            } catch (InterruptedException ignore) {}
            while (progress < 100) {
                //Sleep for up to one second.
                try {
                    Thread.sleep(random.nextInt(1000));
                } catch (InterruptedException ignore) {}
                
	                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.
     */
	public void propertyChange(PropertyChangeEvent evt) {
		if ("progress" == evt.getPropertyName()) {
            int progress = (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

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!

Criado 12 de outubro de 2010
Ultima resposta 13 de out. de 2010
Respostas 2
Participantes 2