Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

ddxtreme

ProgressBar, percentagem de download

Mensagens Recomendadas

ddxtreme    0
ddxtreme

Boas, é assim estou a desenvolver uma pequena aplicação e queria implementar uma barra de progresso para mostrar a percentagem de um download activo...

ainda estou muito fresco em java, e gostaria que me dessem umas dicas...

Quando clico no botao para efectuar download, o programa "freeza" e nao me é possivel mostrar a evoluçao da barra de progresso até que o download esteja concluido :S

obrigado desde ja pela ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

Estás a executar uma tarefa exigente na thread gráfica.

Porque é que toda a gente faz esse erro? Onde é que aprenderam a programar? :D

A tarefa de download deve ser independente do resto da aplicação, tipicamente ou é assíncrona ou inicia numa thread ou é assíncrona e inicia numa thread, dessa forma podes executar outras coisas enquanto estás à espera que o download acaba.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ddxtreme    0
ddxtreme

Estás a executar uma tarefa exigente na thread gráfica.

Porque é que toda a gente faz esse erro? Onde é que aprenderam a programar? :D

A tarefa de download deve ser independente do resto da aplicação, tipicamente ou é assíncrona ou inicia numa thread ou é assíncrona e inicia numa thread, dessa forma podes executar outras coisas enquanto estás à espera que o download acaba.

ehehe :P eu ainda estou no primeiro ano! ainda estamos a dar condiçoes...

mas podias me mostrar um pequeno exemplo como criar trheads para executar diferentes metodos independentemente do resto da aplicação? para poder aplicar no meu código :)

desde já agradeço a tua ajuda

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vitortomaz    1
vitortomaz

ou é assíncrona ou inicia numa thread ou é assíncrona e inicia numa thread

qual a diferença entre [assíncrona] e  [assíncrona e inicia numa thread] ?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

assíncrona continua a pendurar a thread onde foi aberto, pode ser assíncrono mas não deixa de estar a executar no espaço da thread de Swing/AWT, o que não é o pretendido, embora permita que, enquanto não existirem dados, a aplicação execute normalmente, quando os houver, os problemas de bloqueio voltam.

Se for assíncrona e executar na sua própria thread, então tens a vantagem do assíncronismo e a vantagem de executar numa thread.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vitortomaz    1
vitortomaz

assíncrona continua a pendurar a thread onde foi aberto, pode ser assíncrono mas não deixa de estar a executar no espaço da thread de Swing/AWT, o que não é o pretendido, embora permita que, enquanto não existirem dados, a aplicação execute normalmente, quando os houver, os problemas de bloqueio voltam.

Se for assíncrona e executar na sua própria thread, então tens a vantagem do assíncronismo e a vantagem de executar numa thread.

Humm, curiosidade, continua a pendurar a thread chamadora, mas corre noutra thread certo? senão teria que dividir o processamento de UI com IO e aí já notavas qq coisa nos updates há UI certo?

Eu conheço bem é o threadPool do .NET pelo que esta forma é-me um bocado estranha

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

Humm, curiosidade, continua a pendurar a thread chamadora, mas corre noutra thread certo? senão teria que dividir o processamento de UI com IO e aí já notavas qq coisa nos updates há UI certo?

Eu conheço bem é o threadPool do .NET pelo que esta forma é-me um bocado estranha

Não percebi a pergunta, e não conheço o thread pool do .net, não faço ideia em que sentido é diferente, o que usei de threads em .net é foi bastante similar a thread em Java, diria até igual.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

new Thread(new Runnable() {

public void run() {
    //executar código de thread
}

}).start();

Ou crias uma classe que estenda de Thread e redefines o método run.

public class MyThread extends Thread {

//código
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ddxtreme    0
ddxtreme

surgiu.me agora uma duvida, criei uma thread para o metodo de download, o problema e que nao consigo utilizar as variaveis fora dessa thread, ja tentei definir as variaveis para fora da thread, mas acontece que a mesma nao conegues utiliza-las....

eu queria buscar o valor da variaveis em thread download, para poder devolver ao utilizar o "estado actual da operaçao"

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

Para poderes usar as variáveis dentro da classe da thread, no primeiro caso, precisas que elas sejam variáveis da classe "principal", mas isso não é boa politica, pode funcionar na maioria das vezes, mas dependendo do que estás a fazer, pode dar problemas de concorrência. No entanto, se queres "despachar" algum código, e mais tarde melhorar, podes, dentro da pequena inner classe, aceder a variáveis que estejam declaradas na classe que a contém.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ddxtreme    0
ddxtreme

sabes como posso saber a percentagem de download ja efectuado?!

tou a usar este código:

try {
                URL url = new URL(address);
            out = new BufferedOutputStream(new FileOutputStream(localFileName));
                conn = url.openConnection();
            in = conn.getInputStream();
            byte[] buffer = new byte[1024];
         
                while ((numRead = in.read(buffer)) != -1) {
                    out.write(buffer, 0, numRead);
                    numWritten += numRead;
                }

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Knitter    101
Knitter

Ena, nunca mais vi este tópico :P

Mas a resposta seria não, dado que estás a ler de um local remoto, a não ser que saibas à partida o tamanho do ficheiro, não estou a ver como com esse tipo de código possas obter a percentagem que queres.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade