| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 18:11:50
|
leonardobhbr
Virtual Machine Man
![[Avatar]](/images/avatar/e18cfe46b96c30852b565e561152d055.jpg)
Membro desde: 10/08/2006 16:22:17
Mensagens: 530
Offline
|
Pessoal estou com o seguinte problema eu tenho um JFileChooser para salvar um arquivo e quando o cara clica em salvar eu abro JinternalFrame com uma JProgressBar e chamo Trhead.sleep(500) para atualizar a progrees.
Só que o problema que na hora que o cara clica em salvar o JfileChooser soma da tela mais fica um fundo cinza do tamanho do mesmo e não chego ver minha tela de progress em andamento so vejo ela quando acaba o preenchimento ja usei repaint() updateUI() no meu desktopPane mais nao adianta nada desde já grato
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 18:49:02
|
sanson
JavaBaby
![[Avatar]](/images/avatar/c8b49c5a3fe348c6ad482.jpg)
Membro desde: 12/09/2003 14:38:49
Mensagens: 95
Offline
|
Coloca o teu progressBar dentro de uma Thread, pois senao tu nao vai conseguir fazer isso.
Assim tu abre um "processo" para o progress e outro segue no teu fileChooser
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/04/2007 20:34:37
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Na verdade, é o outro processo que deve estar numa thread.
A progress bar responde a eventos do Swing, que são processados na Thread da AWT.
Sempre que um botão é clicado, o código dos listeners é executado dentro dessa thread. Então, se esse código for lento demais, você vai notar que a aplicação congela, mostra telas em cinza, etc.
Para resolver esse problema, basta mover o código demorado para outra thread e, de lá, apenas mandar mensagens para os componentes se atualizarem. Assim a thread da AWT continuará processando eventos, seu trabalho será feito em outro lugar e seu progress bar será pintado normalmente.
A menos que o componente seja Thread-safe, é necessário que essas mensagens sejam enviadas para a fila da AWT, da seguinte forma:
Geralmente, os eventos thread-safe contém o seguinte texto em seu Java doc:
This method is thread safe, although most Swing methods are not. Please see Threads and Swing for more information.
Sobre esse assunto, vale a pena consultar:
Lesson: Concurrency in Swing da própria Sun. Aqui ele fala também da classe SwingWorker, que facilita esse trabalho de multi-threading e Swing.
|
|
|
 |
|
|
|
|