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.
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:
FTPClient ftpc = new FTPClient();
java.io.File f = new java.io.File("/home/yasser/teste.jpg");
//Arquivo para upload
java.io.FileInputStream fis = new java.io.FileInputStream(f);
//Cria um FileInputStream para realizar o upload com o storeFile de FTPClient
//Realiza operações de conexão e login FTP...
CopyStreamAdapter streamListener = new CopyStreamAdapter() {
@Override
public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) {
//this method will be called everytime some bytes are transferred
//Esse método é chamado sempre que houver uma transferência de dados
int percent = (int) (totalBytesTransferred * 100 / f.length());
//Cálculo para arredondar o valor para inserir na barra de progresso
jProgressBar1.setValue(percent);
//Inserindo valor na barra de progresso
}
};
ftpc.setCopyStreamListener(streamListener);
//Adiciona o listener ao FTPClient
//Cria um SwingWorker
SwingWorker sw = new SwingWorker(){
//Dentro deste método fica tudo que precisa ser executado em outra Thread
protected Object doInBackground() throws Exception {
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();
protected void done() {
jProgressBar1.setValue(0);
System.out.println("Feito...");
jButton1.setEnabled(true);
}
};
//Executa o SwingWorker
sw.execute();