Parando uma Thread e um download [RESOLVIDO]

7 respostas
adrielcafe

Fala pessoal!

Estou desenvolvendo um app que se conecta a um Servidor FTP e efetua donwloads e uploads. Somente o que falta fazer é: ao clicar no botão cancelar o app continuará rodando mais o download irá parar.

Então mey problema é o seguinte: Como posso parar uma Thread enquanto faço o download de um arquivo?

Estou usando o Commos Net 3.0.1 para me conectar com o FTP. Eu já tentei logout(), disconnect(), abort()… Na Thread já tentei interrupt(), yield(). stop(), destroy()… Mais nenhum funciona! O download continua rodando em segundo plano!

A “forma segura de se parar uma Thread” não serve para mim, por que não estou usando um While, apenas essa linha de código para baixar:

ftp.retrieveFile(TARGET, SOURCE);

Como posso forçar o download? Preciso de uma força para sair dessa linha e interromper o fluxo normal do programa.

Qualquer sujestão é bem-vinda! :smiley:

7 Respostas

L

poderia fazer um for quem sabe de certo, bom eu uso esse for como se fosse um contador quando chega a certo % ele para e sai fora…

adrielcafe

Diga lokit’s’!

Rapaz, esse é o problema: não adiantar estar em um for ou while, por que eu não quero esperar o download terminar para tomar uma decissão, mas sim forçar a interrupção do download.

Vlw pela força!

soaresinfo

Cara, dá uma olhada nesse tópico: http://www.guj.com.br/java/243630-executar-tarefas-em-threads-e-interromper-por-timeout

só não sei se o danieldestro fez funcionar minha solução.

M

Seu problema é a api que vc está usando e nao o fato de parar… pege uma api que te retorne inputstream e ai vc vai lendo e gravando, qdo quiser parar vc para… Fiz isso a 10000 anos atras mas olha isso aqui:

http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/HttpClient.html

adrielcafe

marcelux, na api Commons Net existe o metodo retrieveFileStream que me retorna um InputStream.

Vou testa-lo e digo o resultado. Caso não funcione vou tentar usando o HttpClient como você indicou.

Vlw pela força!

adrielcafe

Aeee! Problema resolvido! Utilizando o metodo retrieveFileStream() e a famosa “forma segura de se parar uma Thread” consegui parar o download sem precisar fechar minha app!

O código foi o seguinte (adaptado):

OutputStream os;
InputStream is;

localDownload = new FileOutputStream(new File(LOCAL, NOME_ARQUIVO));
os = localDownload;

is = ftp.retrieveFileStream(LOCAL_FTP+NOME_ARQUIVO_FTP);

if(is != null){
   int bytesRead = -1;
   final byte[] buffer = new byte[4096];
   while ((bytesRead = is.read(buffer)) != -1){
      if(cancelado == false)
         os.write(buffer, 0, bytesRead);
      else
         cancelado = false;
   }
}
is.close();
ftp.completePendingCommand();

OBS: O metodo completePendingCommand() é fundamental para que o download possa ser parado.

VLW GALERA!

L

ai sim hein conseguiu,então cara coloque [Resolvido]no seu topic.

abrxx

Criado 17 de junho de 2011
Ultima resposta 17 de jun. de 2011
Respostas 7
Participantes 4