• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ddxtreme

ProgressBar, percentagem de download

15 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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] ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao me podem ajudar?! como criar threads para cada metodo que tenho no porgrama... exemplo de codigo sff

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

muto obrigado, vou tentar implementar no meu "programa" xD

obrigado pela ajuda!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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;
                }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

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