Threads

Seguinte… isso aqui não funciona e até consigo entender o motivo pelo qual isso não funciona:

jProgressBar1.setIndeterminate(true); metodoBlaBla(); jProgressBar1.setIndeterminate(false);

Agora estou querendo usar Threads para isso. Minha dúvida é o seguinte:
Eu vou ter que usar UM Thread para executar o métodoBlaBla e OUTRO para deixar minha jProgressBar1 funcionando ao mesmo tempo? Ou eu posso fazer apenas UM Thread para o jProgressBar funcionar o metodoBlaBla é executado?

Agradecendo antecipadamente…

Artur

olha kra…as classes daki q eu usei progressbar ao menos não funcionam o movimento da progressbar se a mesma thread estiver fazendo alguma coisa q seja demorada…

o q eu faço é bota o processamento demorado até em outra classe e chama ela atravéz de uma thread, enquanto que tudo o que for recurso grafico fica na thread principal…

talvez vc encontre até alguns exemplos de barra mostrando o status onde ta copiando arquivo nas minhas mensagens antigas dai do forum… (mais eu nao usava setindeterminate(), apesar q creio q vc nao terá problemas, com ele o código fica mais simples)

http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html

[quote=arglas]Seguinte… isso aqui não funciona e até consigo entender o motivo pelo qual isso não funciona:

jProgressBar1.setIndeterminate(true); metodoBlaBla(); jProgressBar1.setIndeterminate(false);

Agora estou querendo usar Threads para isso. Minha dúvida é o seguinte:
Eu vou ter que usar UM Thread para executar o métodoBlaBla e OUTRO para deixar minha jProgressBar1 funcionando ao mesmo tempo? Ou eu posso fazer apenas UM Thread para o jProgressBar funcionar o metodoBlaBla é executado?

Agradecendo antecipadamente…
[/quote]

Todo o swing já executa em uma thread so dele. Essa irá alterar o aspeto do progressbar.
A única coisa que vc precisa fazer é colocar essas 3 instruções a executar em outra thread.
Mas isso é mais simples do que parece. Procure pela classe SwingWorker do Java 6

Valeu maior_abandonado, ViniGodoy e sergiotaborda !!
Muito obrigado mesmo, eu vou dar uma pesquisada nas soluções apontadas e postar aqui o melhor resultado que se adequar às minhas necessidades.
Abraços!!

Eu tava tentando usar o SwingWorker assim:


SwingWorker worker = new SwingWorker<Void, Void>() {
        
        @Override
        public Void doInBackground() {
            
            //Aqui ele carrega uma progressbar no modo indeterminate
            ProgressBar pb = new ProgressBar();
            pb.setVisible(true);
            
            return null;
        }

       
        @Override
        public void done() {
            
            //Era pra ele fazer isso enquanto a progressbar é mostrada
            geraLista();
            ordenaTabela();
            
        }
    };   

Não consegui usar esse SwingWorker. Devo estar usando errado.

Eu tentei fazer om threads, criei um thread pra cada função tipo: (provavelmente não estou sabendo usar porque ele cria o progress bar e PRONTO nao faz mais nada =/ )


        (new Thread(new CarregaProgressBar())).start();
        (new Thread(new CarregaLista())).start();
          

Como utilizo elas da forma correta? Lembrando que os dois eventos são disparados ao apertar de um botão.
Heeeeeeelp me please :roll:

Ah e não aparece mensagem de erro nenhuma, ele só não executa nada quando eu uso o SwingWorker…

O setVisible vc dá antes de chamar o SwingWorker.

Os métodos que estão no seu done() atualmente é o que vc quer que rode em background. Então põe eles no doInBackground() !

Ok coloquei antes… e as funções eu coloquei dentro do DoInBackground, porém sem efeito. Ele lança o progressbar porém não termina nunca… alguma sugestão?

Ficou assim e ainda não deu certo:

ProgressBar pb = new ProgressBar();
        pb.setVisible(true);
        
        SwingWorker worker = new SwingWorker<Void, Void>() {
        
        @Override
        public Void doInBackground() {
            
            geraLista();
            ordenaTabela();
            
            return null;
        }
        
        @Override
        public void done() {
            
        }
    };   

:cry:

Não faltou fazer worker.execute()?

Não faz pergunta difícil cara auhauhauhau me explica essa parte que eu desconheço, nunca tinha trabalhado com swingworker =P Onde eu implemento essa parte?

Depois do método deve ser né, tentarei =)

AEEEEEEEEEEE \o/ holymotherfucker até que enfim deu certo =D

Agora só falta cancelar o progressbar heheheheh =D
Ficou meio gambiarra mas funcionou…

VALEU VINYGODOY por compartilhar conhecimento me ajudando com essa parte=P

Abração cara e sucesso independente da sua área de atuação =)

Depois, para complementar seu estudo, dá uma olhada nesse tópico aqui (não esquece da página 2):
http://www.guj.com.br/posts/list/52964.java#279083

Mostra como fazer um relógio na tela, usando threads ou timers.

Valeu fera!!
Vou olhar sim!
Abração :smiley: