Ah, agora entendi o que você quer fazer.
Você leu tudo de uma vez com um comando só ( fis.read(mapArea); ).
Só que esse comando leva um certo tempo para ser executado, se mapArea for realmente grande. O problema é que você quer pôr um JProgressBar para ir mostrando o progresso “em paralelo” com a leitura.
Para poder usar um JProgressBar, no seu caso, você pode tentar uma de duas coisas:
a) Crie o JProgressBar como “indeterminate”, então chame o comando para ler o arquivo, e a seguir, depois de lido o arquivo, desligue o JProgressBar;
ou então
b) Crie o JProgressBar normalmente, leia o arquivo em pedacinhos (não todo ele de uma vez), e nesse caso é que você pode ir atualizando o valor do JProgressBar.
Não tenho muita experiência em java desktop, mas imagino que o progressbar indeterminate é aquele que fica de um lado pro outro, ou dando voltas, e não mostra exatamente o progresso de leitura do arquivo…
Acho que deve haver algum jeito de colocar o progressbar em uma thread separada e fazer as duas coisas juntas, só não sei como (ainda) vou pesquisar…
sim indeterminate ele fica dando voltas… o problema eh q como eu vou saber quando o processo de leitura jah foi terminado se ele lê tudo de uma vez só???
public class Metodos implements Runnable {
public Metodos(File f) throws FileNotFoundException, IOException{
new Thread(this).start();
readMap(fis, mapWidth, mapHeight);
}
public byte[] readMap(RandomAccessFile fis,int width, int height) throws IOException{
byte mapArea[] = new byte[width*height];
fis.read(mapArea);
return mapArea;
}
public void run() {
Progress p = new Progress();
if(fim){
p.disposeIt();
}
}
Mas o q tah acontecendo é que o ProgressBar soh aparece depois q o prcesso de leitura eh finalizado, mesmo eu colocando a thread para ser iniciada antes disso…
Então eu testei seu exemplo… mas quando eu coloco as duas janelas ( uma q está com o JProgressBar e a outra q tem a imagem q estou lendo byte a byte), acontece q a q estah com a barra de progresso o aparece, porém não completamente…é como se o meu micro estivesse travando…ela soh passa a ficar totalmente visivel quando todo o processo de leitura da figura eh completado… mesmo eu colocando a thread do Frame q contém o JProgressBar antes de eu chamar o processo de leitura… O q me parece é q um ainda depende do outro mesmo com o uso da thread
byte[] b = new byte[2048];
int length;
while ((length = is.read(b)) != -1) {
for (int i = 1; i < length; i++)
Barra.tamanho.add(i);
System.out.println();
arquivo.write(b, 0, length);
}
Onde is é o InputStream e o arquivo é o Arquivo a ser gravado.