estou fazendo um software simples e estou com um pequeno problema.
Tenho um JFrame, dentro do mesmo coloquei uma JTable e um JProgressBar.
Após inicializar o JFrame eu chamo um método que não faz nada além de adicionar linhas a tabela e atualizar o valor do JProgressBar.
No entanto, dentro deste método eu chamo o método wait e espero por alguns segundos antes de adicionar uma nova linha.
Aí que surge o problema.
O JFrame só é atualizado quando todas as linhas são adicionadas. Durante a execução aparece a imagem que estava no fundo do JFrame, por exemplo, os ícones do Windows.
Verifiquei que ao utilizar um JOptionPane.showMessageDialog() entre a adição de uma linha e outra o JFrame é atualizado.
Imagino que alguns já devem ter passado por problemas semelhantes. Espero a ajuda de vocês.
Abraços
Acontece que o wait faz o thread da aplicação esperar, e por um acaso é o mesmo Thread da sua aplicação Swing.
Tenta dar uma olhadinha em como usar Swing e Threads pra resolver seu problema.
julianofischer
Gostei das dicas galera!
vou tentar resolver ai aviso se obtive sucesso
abraços
E
entanglement
Se olhar os meus programas vai ver que eu:
a) Não costumo tentar sincronizar threads com “wait” e “notify”. Eu simplesmente acho isso muito, muito, muito complicado - nem sei por que “wait”, “notify” e “new Thread” não foram classificadas como o “goto” - existem mas não devem ser chamadas diretamente; só profissionais especialistas (como o professor Doug Lea) é que sabem mexer corretamente com isso sem se queimarem. O resto dos comuns mortais deve usar algum encapsulamento desses métodos que está no pacote java.util.concurrent (100% designado e 95% programado pelo professor Doug Lea).
b) wait != sleep
c) Se for preciso usar alguma sincronização entre tarefas que seja mais complicado que um simples Thread.join, então é melhor sempre usar alguma das N classes do pacote java.util.concurrent.
lucasportela
Pesquise sobre SwingWorker
é justamente a solução que você quer
julianofischer
Valeu todo mundo.
Muito obrigado.
Utilizei a classe SwingWorker para resolver meu problema.