Treads Ajuda.[RESOLVIDO]

2 respostas
xDenTim

Oi ,

estou começando estudar interface gráfica mais eu não sei nada sobre Threads =)

estava vendo no fórum muitos usuários falando pra não usar Threads com Swing gostaria de saber o motivo

e saber o que está acontecendo nesse trecho de código

desde já agradeço

public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { frame = new GuiLogin(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Dimension tela = Toolkit.getDefaultToolkit().getScreenSize(); frame.setLocation((tela.width - frame.getSize().width) / 2, (tela.height - frame.getSize().height) / 2); frame.setVisible(true); } });

//Dente xD

2 Respostas

ViniGodoy

Não é que você não deva usar outras threads com o Swing. O que você não pode fazer é deixar essas outras threads mexerem nos componentes.
Só quem pode mexer nos componentes é a própria thread do Swing.

A recomendação de não usar threads está inclusive na documentação:
http://docs.oracle.com/javase/tutorial/uiswing/concurrency/

Agora, você é obrigado a disparar o processamento pesado de eventos em outras threads se não quiser travar sua interface gráfica.

O código que você postou está empilhando uma série de comandos (que estão dentro do Run) na fila de mensagens da thread do Swing. É o que o comando SwingUtilities.invokeLater (ou EventQueue.invokeLater) faz.
Note que esse código, apesar de usar um Runnable, não está disparando novas threads.

Ele é necessário pois você está no método main, que é disparado na main thread, e precisa deixar uma janela visível. Como deixar uma janela visível é mexer nos componentes graficos, então a main thread não pode faze-lo sozinha. Assim, vc enfilera um “pedido” dizendo a thread do Swing para deixar sua janela visível assim que possível.

PS: Nada a ver com o assunto, mas é mais fácil centralizar a tela com o comando: frame.setLocationRelativeTo(null)

ao invés de fazer aquela contarada ali na linha 07.

xDenTim

Agora sim, Obrigado pela explicação Vini =)

Criado 2 de janeiro de 2012
Ultima resposta 2 de jan. de 2012
Respostas 2
Participantes 2