[RESOLVIDO] JProgressBar para medir o progresso de somente um método
2 respostas
O
othman
Olá, apesar de parecer uma dúvida simples, não encontrei uma resposta em lugar nenhum, preciso implementar um JProgressBar que meça o tempo de progresso de somente um método, no caso, um método que irá realizar o FTP de um arquivo. Como devo fazer pra conseguir implementar esse progress bar? Através de Threads? Pesquisei na documentação do Java e não compreendi muito bem o exemplo de uso, pois sou iniciante em programação.
Se alguém puder me esclarecer como fazer isso, eu agradeço desde já.
Onde está escrito “changeSupport.firePropertyChange(FTPPERCENT, null,
totalBytesTransferred*100/length);”, você precisa pegar seu controle JProgressBar, e passar o progresso.
A operação de FTP deve ser executada em uma thread separada da thread do Swing.
O
othman
Olá, agradeço sua sugestão e consegui me guiar para uma solução através dela. O que eu utilizei para criar a barra foram duas classes:
CopyStreamAdapter - Do Apache Commons net, é usada como listener da operação FTP realizada, chama o método bytesTransferred cada vez que algum dado é transferido.
SwingWorker - Do pacote Swing, cria uma Thread automaticamente bastando digitar todo o código que você pretende inserir em uma Thread.
Abaixo, segue o código:
FTPClientftpc=newFTPClient();java.io.Filef=newjava.io.File("/home/yasser/teste.jpg");//Arquivo para uploadjava.io.FileInputStreamfis=newjava.io.FileInputStream(f);//Cria um FileInputStream para realizar o upload com o storeFile de FTPClient//Realiza operações de conexão e login FTP...CopyStreamAdapterstreamListener=newCopyStreamAdapter(){@OverridepublicvoidbytesTransferred(longtotalBytesTransferred,intbytesTransferred,longstreamSize){//this method will be called everytime some bytes are transferred//Esse método é chamado sempre que houver uma transferência de dadosintpercent=(int)(totalBytesTransferred*100/f.length());//Cálculo para arredondar o valor para inserir na barra de progressojProgressBar1.setValue(percent);//Inserindo valor na barra de progresso}};ftpc.setCopyStreamListener(streamListener);//Adiciona o listener ao FTPClient//Cria um SwingWorkerSwingWorkersw=newSwingWorker(){//Dentro deste método fica tudo que precisa ser executado em outra ThreadprotectedObjectdoInBackground()throwsException{jButton1.setEnabled(false);ftpc.storeFile(f.getName(),fis);}//Neste método ficará todo o código a ser executado no final da execução do doInBackground();protectedvoiddone(){jProgressBar1.setValue(0);System.out.println("Feito...");jButton1.setEnabled(true);}};//Executa o SwingWorkersw.execute();