repaint e updateUi não funciona  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
leonardobhbr
Virtual Machine Man
[Avatar]

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
sanson
JavaBaby
[Avatar]

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
[ICQ]
ViniGodoy
Moderador
[Avatar]

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.
[WWW]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team