bom pessoal sou novo por aqui e estou gostando muito do forum.
trabalho a um ano com desenvolvimento em vb.net e estou começando agora em java. estou desenvolvendo um sistema de backup para empresa onde trabalho porem estou com um problema na hora de copiar os arquivos.
Criei uma classe com um jframe quem contem dois jprogress bar: um que mostrará o progresso do arquivo atual e outro que mostrara o progresso total do backup.
tenho, em outra classe um metodo responsavel por capactar e salvar os arquivos do backup e é neste metodo que que chamo o jframe de progresso e durante o metodo vou passando os valores das barras atraves dos metodos set values que criei para cada um.
meu problema é que quando o processo começa a janela de progresso abre mas as progress bar ficam invisives e só aparecem depois que o processo de backup termina.
andei lendo varios topicos aqui do forum e varios falam sobre threads. nao estou usando threads. sera por causa disso?
outra coisa. estou usando a ide do netbeans. entao toda a parte de inteface grafica eu “desenhei” hehe…
o que nao esta aparecendo é o jprogress bar mesmo. nao sei o que acontece. pelo que estava vendo é como se a janela que contem os jprogress só carregasse após terminar o processo de compactação. o processo que estou fazendo é bem parecido com este que voce passou porem a classe que tem o metodo de compactação nao é a mesmo que possui os jprogress.
será que pode ser por causa disso? tipo, quando uma classe esta executando um metodo a outra fica estatica. e no meu enquanto estou compactando a tela nao fica visivel por inteiro?
0
001gruder001
não intendi direito não mais vc ta se certificando que ta +/-
progress.setVisible(true);
?
A
Alisson_Lima
sim, ja me certifiquei sim… estou utilizando o setvisible(true)… ja tentei colocar o setvisible nos jprogres tambem… tipo : jprogres.setvisible(true) mas nao adianta… é como se o jframe só carregasse por completo depois que o metodo terminasse de compactar os arquivos. mas esta tudo ok… debuguei o codigo linha a linha para me certificar se estava passando os values corretos e esta tudo certo. a unica coisa é que enquanto o metodo esta sendo processado os jprogress nao aparecem…
A
Alisson_Lima
desculpe pela demora em responder… mas é que a semana começou e a correria rotineiro do trabalho tambem.
depois de muito apanhar e ficar horas a fio pesquisasndo na net me encarnei no exemplo que o 001gruder001 enviou… no começo estava meio recioso em utilizar threadas pois nao sabia muito bem como que funcionava… ma após dar uma pesquisa vi que era isso mesmo que eu estava precisando… vou postar o codigo de como ficou o meu metodo aqui funcionando… só nao reparem se estiver meio bagunçado… mexi tanto no codigo para ver ele funcionando e apresentar na minha firma esta segundo feira que deu uma bagunçada…mas vou ajeitar antes de entregar o trabalho final… assim que chegar em casa vou postar o fonte:
A
Alisson_Lima
bom ta aih o codigo final como que final o meu metodo funcionando blz:
publicvoidGeraBackupZip(){Threadt=newThread(newRunnable(){publicvoidrun(){Stringfiles[];files=Funcoes.getConfig(3).split("&");StringbaseDados=Funcoes.getConfig(0);Datedata=newDate();//Reserva espaço necessário em memóriabyte[]buffer=newbyte[18024];//Nome do Arquivo ZipadoStringzipFileName;if(Funcoes.getConfig(2).equals("0")){zipFileName=Funcoes.getConfig(1)+"\backup.zip";}else{zipFileName=Funcoes.getConfig(1)+"\backup"+formatData.format(data).replace("/","_")+".zip";}try{ZipOutputStreamout=newZipOutputStream(newFileOutputStream(zipFileName));out.setLevel(Deflater.DEFAULT_COMPRESSION);//Verifica se o numero de Arquivos é maior que zeroif(files.length>0){//Inicia os valores iniciais do formulario de progressosetVisible(true);setValueTotalMin(0);setValueTotalMax(files.length);setValueTotal(0);setValueAtuallMin(0);setValueAtual(0);//percorre a lista de arquivos campactandofor(inti=0;i<files.length;i++){if(i==0){//Se for o primeiro arquivo, campacta a base de dadosFileInputStreaminBase=newFileInputStream(baseDados);//referencia para o total de bytes do arquivoFileInputStreaminBaseTot=newFileInputStream(baseDados);//extrai do diretorio somente o nome do arquivoout.putNextEntry(newZipEntry(baseDados.substring(baseDados.lastIndexOf("\")+1))); int len; //Calcula o total de bytes do arquivo int a = 0; while ((len = inBaseTot.read(buffer))>0){ a += 1; } inBaseTot.close(); setValueAtualMax(a); setValueAtual(0); //Escreve o arquivo e acrescenta o progresso len = 0; a =0; while ((len = inBase.read(buffer))>0){ a +=1 ; setValueAtual(a); Thread.sleep(1); out.write(buffer, 0, len); } out.closeEntry(); inBase.close(); } FileInputStream in = new FileInputStream(files[i]); FileInputStream inArqTot = new FileInputStream(files[i]); out.putNextEntry(new ZipEntry(files[i].substring(files[i].lastIndexOf("\")+1))); int len; //Calcula o total de bytes do arquivo int a = 0; while ((len = inArqTot.read(buffer))>0){ a += 1; } inArqTot.close(); setValueAtualMax(a); setValueAtual(0); //extrai do diretorio somente o nome do arquivo setNomeArquivo(files[i].substring(files[i].lastIndexOf("\")+1)); //Escreve o arquivo e acrescenta o progresso len = 0; a = 0; while ((len = in.read(buffer))>0){ a +=1; setValueAtual(a); Thread.sleep(1); //frmProgresso.setValueAtual(len); out.write(buffer, 0, len); } out.closeEntry(); in.close(); setValueTotal(i+1); Thread.sleep(1); } JOptionPane.showMessageDialog(null, "BackupRealizadocomSucesso!","BackupNS",JOptionPane.INFORMATION_MESSAGE); } out.close(); exit(); }catch (IllegalArgumentException iae){ iae.printStackTrace(); }catch (FileNotFoundException fnfe){ fnfe.printStackTrace(); }catch (IOException ioe){ ioe.printStackTrace(); }catch (Exception e){ System.out.println("teste"); } } }); t.start();