Olá, estou com problema pra utilizar um gif como progressBar, eu do um visible(true) toda vez que executo algum processo demorado, mais o gif não é atualizado enquanto o outro processo esta sendo executado, estou tentando amarrar de alguma forma este gif a uma thread, mais não estou conseguindo, será que alguem tem algum exemplo que possa me ajudar?
Qualquer processo longo deve ser delegado a uma thread (usualmente uma SwingWorker). Se o processo longo ficar na mesma thread do Swing, tudo (inclusive os gifs animados) ficará parado e não será atualizado corretamente.
G
gordo
Olá entanglement, vlw pela resposta, tenho problema para executar esse processo em uma outra thread, pois esse processo atualiza alguns componentes de tela, e acaba gerando exception (Thread safe), estou tentando usar o invokeAndWait, mais mesmo assim ocorre os erros. Se alguem tiver algum exemplo para me ajudar ficarei agradecido.
E
entanglement
O cara que atualiza os componentes de tela deve usar invokeLater, não invokeAndWait.
E
entanglement
Exemplo:
SwingUtilities.invokeLater(newRunnable(){publicvoidrun(){textArea.setText(String.format("Esta eh a %d vez que passou por aqui",vez));}});
G
gordo
entanglement sua resposta me ajudou muito, o painel onde é exibido o gif já aparece na hora certa, porem o gif parece que não atualiza, ele aparece na tela mais não funciona a animação…vlw pela força
G
gordo
Estou usando esta função para executar meu processo demorado, porem parece q msm assim a tela fica congelada, estou usando a função corretamente??
Não, é a operação lenta que tem de ficar em uma thread separada, e as coisas que ela precisa fazer (como atualizar um label ou um JTable) é que devem ser invocadas via invokeLater. invokeLater força o código que está no método run a rodar na thread do Swing.
G
gordo
Consegui resolver o problema, no processo principal usei SwingWorker, vlw pela ajuda entanglement.