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.
oitathi
vc poderia dar um exemplo do primeiro caso? Ficaria muito agradecida caso pudesse. Obrigada!
drigo.angelo
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…
oitathi
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ó???
raposo.leandro
Posso estar falando besteira mas parece que vc poderia resolver esse problema usando threads.
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…
E
entanglement
Exemplo dos dois casos.
packageguj;importjava.awt.BorderLayout;importjava.awt.FlowLayout;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JProgressBar;importjavax.swing.SwingUtilities;publicclassIndeterminateProgressBarExampleextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateJPaneljContentPane=null;privateJProgressBarprbLeituraArquivoGrande=null;privateJPanelpnlBotoes=null;privateJButtonbtnIndeterminate=null;privateJButtonbtnStandard=null;/** * This method initializes prbLeituraArquivoGrande * * @return javax.swing.JProgressBar */privateJProgressBargetPrbLeituraArquivoGrande(){if(prbLeituraArquivoGrande==null){prbLeituraArquivoGrande=newJProgressBar();}returnprbLeituraArquivoGrande;}/** * This method initializes pnlBotoes * * @return javax.swing.JPanel */privateJPanelgetPnlBotoes(){if(pnlBotoes==null){pnlBotoes=newJPanel();pnlBotoes.setLayout(newFlowLayout());pnlBotoes.add(getBtnIndeterminate(),null);pnlBotoes.add(getBtnStandard(),null);}returnpnlBotoes;}/** * This method initializes btnIndeterminate * * @return javax.swing.JButton */privateJButtongetBtnIndeterminate(){if(btnIndeterminate==null){btnIndeterminate=newJButton();btnIndeterminate.setText("Indeterminate");btnIndeterminate.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEvente){newThread(newRunnable(){publicvoidrun(){btnIndeterminate.setEnabled(false);prbLeituraArquivoGrande.setIndeterminate(true);try{Thread.sleep(5000);// simula um processo lento}catch(InterruptedExceptionex){}prbLeituraArquivoGrande.setIndeterminate(false);btnIndeterminate.setEnabled(true);}}).start();}});}returnbtnIndeterminate;}/** * This method initializes btnStandard * * @return javax.swing.JButton */privateJButtongetBtnStandard(){if(btnStandard==null){btnStandard=newJButton();btnStandard.setText("Standard");btnStandard.addActionListener(newjava.awt.event.ActionListener(){publicvoidactionPerformed(java.awt.event.ActionEvente){newThread(newRunnable(){publicvoidrun(){btnStandard.setEnabled(false);prbLeituraArquivoGrande.setValue(0);for(inti=0;i<100;++i){try{prbLeituraArquivoGrande.setValue(i);Thread.sleep(50);// simula um processo lento// mas que foi dividido em partes}catch(InterruptedExceptionex){}}prbLeituraArquivoGrande.setValue(100);btnStandard.setEnabled(true);}}).start();}});}returnbtnStandard;}/** * @param args */publicstaticvoidmain(String[]args){// TODO Auto-generated method stubSwingUtilities.invokeLater(newRunnable(){publicvoidrun(){IndeterminateProgressBarExamplethisClass=newIndeterminateProgressBarExample();thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thisClass.setVisible(true);}});}/** * This is the default constructor */publicIndeterminateProgressBarExample(){super();initialize();}/** * This method initializes this * * @return void */privatevoidinitialize(){this.setSize(300,200);this.setContentPane(getJContentPane());this.setTitle("Exemplo de JProgressBar");}/** * This method initializes jContentPane * * @return javax.swing.JPanel */privateJPanelgetJContentPane(){if(jContentPane==null){jContentPane=newJPanel();jContentPane.setLayout(newBorderLayout());jContentPane.add(getPrbLeituraArquivoGrande(),BorderLayout.NORTH);jContentPane.add(getPnlBotoes(),BorderLayout.SOUTH);}returnjContentPane;}}
oitathi
o problema continua sendo q o a barra soh aparece completamente qdo o processo de leitura eh realizado…
oitathi
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
doravan
Tenta fazer o seguinte:
byte[]b=newbyte[2048];intlength;while((length=is.read(b))!=-1){
for(inti=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.
oitathi
Desculpa, mas eu não entendi dias coisas:
eu não entendi o q seria esse comando:
Barra.tamanho.add(i);//Barra é o meu JProgressBar? Tamanho seria o length?
eu não quero gravar nada, apenas ler…
Acho q eu não entendi o seu exemplo…
Vc poderia explicar???
Obrigada!!!