Acesso a banco de dados trava a interface!

Olá a todos,

Estou com um prbleminha que parece bem pertinente para todos. O negócio é o seguinte:

Eu Faço uma busca no banco de dados (Oracle) e apresento o resultado em uma JTable. O problema é que enquanto estou acessando o banco de dados a interface fica travada e a JTable não atualiza (Gostaria que ela fosse atualizando conforme os valores fossem sendo lidos no Banco de dados) e principalemnet gostaria que a interface não ficasse travada.

A parte do código que lê o Banco de Dados já é uma thread, mas mesmo assim a interface continua travada!!

Alguem pode me ajudar??

Agradeço desde já

Pelo que eu conheço (muito pouco) vai dar muito trabalho pra implementar uma função/método que faça com que o JTable atualize de acordo com a pesquisa no banco de dados, principalmente por quê a interação entre o Java e o MySQL seria intensa. O que acontece no seu código agora é uma requisição ao servidor do banco de dados e uma resposta, que seria a query inteira. Partir isso daria muito trabalho, no meu ver.

Já quanto à questão do travamento acho que tem algo a ver com de onde vc chama a thread. Que os moderadores me salvem aí: acho que você tem que usar o EventQueue.invokeLater.

Alan,

concordando com o colega gertmuller, para inserir e mostrar em um JTable uma pesquisa, só com uma thread bem implementada. Acho que existem alguns exemplos disso no Google, como usar uma thread. Em um projeto, usamos uma Task que nao congelava o sistema, ele estava fazendo mil operações mas a interface não travava. Tenta aí e nos conte o resultado depois.

vlw

Quanto à atualizar a lista aos poucos concordo com o Alan, quanto ao travamento já fiz um sistema usando SwingWorker e funcionou perfeitamente, com ela vc pode inclusive monitorar o andamento e gerar uma barra, a mais fácil é a do tipo ping pong…
Seguem aí links que podem te ajudar…
http://java.sun.com/products/jfc/tsc/articles/threads/threads2.html
http://java.sun.com/docs/books/tutorial/uiswing/concurrency/
http://rfiume.blogspot.com/2007/06/o-bsico-sobre-swingworker.html
http://www.javaworld.com/javaworld/jw-06-2003/jw-0606-swingworker.html?page=2

Vale ressaltar que o uso de threads deve ser feito de forma muito reponsável pois um numero excessivo pode deixar sua aplicação lenta…

Eu faço exatamente isso, só que eu uso SWT. Existe uma espécie de API derivada do SWT que se chama JFace, ela contem classes que facilitam o uso de algumas funções do SWT, uma delas é a ligação entre banco de dados e componentes graficos. Eu uso tabelas na minha aplicação baseadas nesse esquema, toda vez que é feira uma alteração nos dados pertinentes a essa tabela ela faz quase automaticamente esses dados no BD e atuliza tudo.

Eu não uso multitrhed, e implementação desse esquema é bem simples

Agora com relação ao desempenho e ao travamento da interface, acho que disso não tem como fugir, pois como disseram, isso faz com que iteração entre BD e sistema seja intensa, e enquanto a interface está sendo alterada, ( o momento em que os dados estão sendo colocados na tabela ) ela tem que ficar travada, pois o usuário não pode interagir com ela nesse momento

Olá,

Primeiramente gostaria de agradecer a resposta de todos.

Usei o SwingWorker e funcionou perfeitamente. A interface não trava e a JTable é atulizada em tempo real. Só pra esclarecer, a atualização da Jtable não é feita com apenas uma consulta ao BD, na verdade ela é feita depois de uma breve consulta, o meu problema era que logo após esta breve consulta eu fazia outra consulta logo após e não dava tempo da interface atualizar.

Mas o SwingWorkre funcionou perfeitamente, inclusive depois de executar a operação eu ainda posso navegar tranguilamente pela interface.

Vou dar uma olhada mais tarde no JFace, pode ser útil!

Meus agradecimentos especiais ao devel.andrerocha.

Até

:smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: :smiley: