Threads e parte gráfica

bom dia moçada, é o seguinte …

estou querendo alterar uma aplicação que tenho para utilizar threads na parte que diz respeito ao carregamento das telas internas de meu sistema …

ai vcs me perguntam: como assim??

bem, tenho uma aplicação que abre um monte de internal frames (o usuario vai clicando e abrindo) que servem para entrada e saída de dados de forma geral; dentre essas telas algumas carregam rápido, algumas demoram um pouco mais e assim por diante. Eu estava pensando em transformar cada tela interna em uma thread para que elas trabalhassem “independente” da thread principal, no seguinte sentido, se o usuario mandar abrir uma tela que demora, a aplicação nao ficar travada esperando o termino desse carregamento, caso alguma tela trave/ de problema (espero q nunca aconteça ) nao parar o sistema todo, esse tipo de coisa …

ai vcs me perguntam de novo: tá, mas e qual é a dúvida?

então, tendo em vista esse cenário eu gostaria de saber de quem já tem experiência com esse tipo de situação ae, o que consideram melhor? essa linha que estou vendo é boa (cada tela interna ser uma thread), vocês tem outras idéias? existe algum problema grave que nao estou vendo? afetará algo na performance do sistema? tem mais algum ponto importante que devo considerar aqui?

agradeço quem puder me dar alguma dica
[]´s
Giovani

Olá.

Bom, vamos por partes… O Sistemas de eventos do Swing roda em uma thread só. Portanto, não é muito apropriado rodar cada tela numa thread exatamenteo. O que acontece também, é que não é sua tela que demora para abrir, e sim uma tarefa que o seu sistema está executando, e que depois de executada abre sua tela, certo?

Então, o que vc vai rodar uma thread separada é essa tarefa do seu sistema. E quando essa tarefa finalizar a execução vc vai abrir a tela nova . Enquanto a tarefa nao ermina de ser executada, imagino que vc queira mostrar uma barra de progresso, uma ampulheta ou qualquer outra firula para o usuário saber o que sistema está pensando.

Recomento vc dar uma olhada na seguinte classe do java 1.6

http://java.sun.com/javase/6/docs/api/javax/swing/SwingWorker.html

Abs

opa andreban, correto o que voce falou … inclusive voce comentou ali o “detalhe” que eu nao havia percebido antes de formular esse topico:

apenas para complementar o topico aqui caso seja util a mais usuarios, teve um outro colega que me enviou os seguintes links para olhar que vao de encontro tambem ao que vc me passou andre:

http://java.sun.com/docs/books/tutorial/uiswing/concurrency/
http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html

obrigado pela ajuda
[]´s
Giovani