JProgressBar

2 respostas
K

Olá pessoal,

Alguém saberia dizer pq a barra não vai completando aos poucos?
só aparecendo cheia no final, com a String sucesso.
OBS. já fiz Thread.sleep para ver o preenchimento mais ela só aparece completa no final!

ai vai o código do botão responsável por fazer o backUp dos arquivos já selecionados anteriormente.

File arquivosNovos[] = novosArquivos.getSelectedFile().listFiles();
		File arquivosAntigos[] = destinoArquivos.getSelectedFile().listFiles();
		ArrayList<File> nomeArquivos = new ArrayList<File>();

		for (int i = 0; i < arquivosNovos.length; i++) {
			for (int j = 0; j < arquivosAntigos.length; j++) {
				if (arquivosNovos[i].getName().equals(
						arquivosAntigos[j].getName())) {
					nomeArquivos.add(arquivosAntigos[j]);
				}
			}

		}

		int cont = 0;
		if (nomeArquivos.size() > 0) {
			pBarBackUp.setMinimum(0);
			pBarBackUp.setMaximum(nomeArquivos.size());
			pBarBackUp.setStringPainted(true);
			pBarBackUp.setString("Fazendo backUp...");

		}
		boolean fezBackUp = true;
		for (File file : nomeArquivos) {
			setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
			try {
				Copiar.copiarArquivo(file,new File(backUpArquivos.getSelectedFile().getAbsolutePath() + "\\" + file.getName()));
				pBarBackUp.setValue(++cont);
			} catch (Exception e) {
				fezBackUp = false;
				pBarBackUp.setString("Ocorreu algum erro ao copiar!!");
				JOptionPane.showMessageDialog(this,"Ocorreu um ao fazer o backUp, tente novamente!");
				setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			}
		}

		if (fezBackUp) {
			btFazerCopia.setEnabled(true);
			btNovos.setEnabled(false);
			btDestino.setEnabled(false);
			btBackUp.setEnabled(false);
			btFazerBackUp.setEnabled(false);
			pBarBackUp.setString(cont + " Arquivo(s) Copiado(s) com sucesso!");
		}
		setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

	}

Posso disponibilizar o código do frame todo se necessário.
Obrigado.

2 Respostas

sf.marcius

o código que atualiza a jprogressbar tem que estar em uma thread separada.

Eu aconselho vc a criar um SwingWorker, com o código que vc postou implementando o método doInBackground().

http://download.oracle.com/javase/tutorial/uiswing/components/progress.html

updt: snippet bem basicão…

import javax.swing.SwingWorker;


public class TesteProgress extends javax.swing.JFrame {

    public TesteProgress() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // &lt;editor-fold defaultstate="collapsed" desc="Generated Code"&gt;
    private void initComponents() {
	    // codigo gerado automaticamente pelo netbeans... :)
    }// &lt;/editor-fold&gt;

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        SwingWorker task = new SwingWorker() {
            // anonimous class contendo a task
            @Override
            protected Object doInBackground() throws Exception {
                // inicio codigo task
                for (int i = 0; i &lt;= 100; i++) {
                    jProgressBar1.setValue(i);
                    Thread.sleep(25);
                }
                // fim codigo task
                return null;
            }


        };
        /* executa a task criada (cada instancia de SwingWorker deve ser executada
            uma unica vez, por isso implementei direto aki). */
        task.execute();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new TesteProgress().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    private javax.swing.JProgressBar jProgressBar1;
    // End of variables declaration
}

feitow!

K
Feito rapaz, show de bola.

Eu tinha feito uma nova thread para isso, mais ao final chamei

thread.run();

e devia ter chamado thread.start();

funcionou fazendo uma nova thread e como você postou.

Obrigado.

Criado 21 de novembro de 2011
Ultima resposta 21 de nov. de 2011
Respostas 2
Participantes 2