JProgressBar no método zip

Olá pessoal, tudo bem com vocês?

Teria como eu implementar uma barra de progresso enquanto eu compacto um arquivo com o método abaixo?
Desde já, agradeço a ajuda.

public void zip(File[] files, File outputFile, JProgressBar barraProgresso) throws IOException {

	if (files != null && files.length > 0) {

		ZipOutputStream out = new ZipOutputStream(

				new FileOutputStream(outputFile));

		Stack<File> parentDirs = new Stack<File>();

		zipFiles(parentDirs, files, out, barraProgresso);

		out.close();

	}

}

private void zipFiles(Stack<File> parentDirs, File[] files,

		ZipOutputStream out, JProgressBar barraProgresso) throws IOException {

	byte[] buf = new byte[1024];
	
	for (int i = 0; i < files.length; i++) {
		
		if (files[i].isDirectory()) {

			// se a entrada é um diretório, empilha o diretório e

			// chama o mesmo método recursivamente

			parentDirs.push(files[i]);

			zipFiles(parentDirs, files[i].listFiles(), out, barraProgresso);

			// após processar as entradas do diretório, desempilha

			parentDirs.pop();

		} else {

			FileInputStream in = new FileInputStream(files[i]);

			// itera sobre os itens da pilha para montar o caminho

			// completo do arquivo

			String path = "";

			for (File parentDir : parentDirs) {

				path += parentDir.getName() + "/";

			}

			// grava os dados no arquivo zip

			out.putNextEntry(new ZipEntry(path + files[i].getName()));

			int len;

			while ((len = in.read(buf)) > 0) {

				out.write(buf, 0, len);

			}

			out.closeEntry();

			in.close();

		}

	}

}

@Felipe_Hoffmann

Usando Thread.

Eu uso uma classe abstrata com implementação Runnable que recebe JProgressBar, assim, quando eu dou um setValue no JProgressBar, o sistema preenche. (Parece bobagem mas se vc der um setValue sem usar Thread, o sistema não preenche até que toda a operação de seu método seja concluído)

Depois vc fara o seguinte: int qtddDividida = 100 / quantidadeDeArquivos << Pode ser global

E no final de cara “zipagem” vc data um jProgress.setValue(jProgress.getValue()+ qttdDivida);

Da uma olhada no site onde aprendi a implementar tal operação:

http://respostas.guj.com.br/30924-jprogressbar-sincronizado-com-metodo

Essa quantidade de arquivos seria cada iteração do laço, utilizando como base o files.lenght, correto?

Eu consegui resolver, está funcionando tudo certo. Criei uma classe BarraProgresso com os métodos para calcular a quantidade de arquivos e incrementar a mesma.

for (int i = 0; i < files.length; i++) {

		barraProgresso.incrementarBarra(barraProgresso, valorIncremento);

Obrigado pela sua resposta. Esse link que você passou é muito útil.
Abraço!