Problema de thread?

3 respostas
wellington7

Tenho uns problemas de interface gráfica, onde as vezes o componente é inserido no frame e as vezes não, e estive lendo sobre swing e threads, os problemas e tal… E vi o exemplo

public class HelloRunnable implements Runnable {

    public void run() {
        System.out.println("Hello from a thread!");
    }

    public static void main(String args[]) {
        (new Thread(new HelloRunnable())).start();
    }

}

Mas nos artigos diz para utilizar a thread em qualquer manipulação de componentes swing, é correto fazer algo assim para inserir no frame:

JFrame frame;
new Thread(new HelloRunnable()){
  frame.add(getMeuComponente());
}

ou não?

3 Respostas

ViniGodoy

Na verdade é ao contrário. No Swing você não pode inserir de outras threads, a não ser a do próprio Swing.

O código que você viu foi provavelmente:

EventQueue.invokeLater(new Runnable() { public void run() { //Atualiza componentes do swing aqui } }

Esse código não cria uma thread. Ele simplesmente empilha um comando na thread do Swing. Na verdade, é o mesmo que o SwingWorker faz.

O seu problema pode ser pq os seus componentes já estão visíveis. Se vc for inserir coisas num painel visível, vc precisa usar o comando invalidate() no painel após a inserção do último componente. Assim ele se repinta inteiro. :wink:

Se não for isso, verifique se as propriedades do seu layout manager estão corretas.

wellington7

Resolvido… o problema é que o Netbeans 6, mesmo vc salvando o arquivo, ao rodar o programa ele não reconhece, vc tem que salvar, rodar, e rodar denovo pra ele reconhecer o arquivo… :frowning:
Netbeans pra desenhar as telas até vai… mas pra edição de código… prefiram o Eclipse…

Marky.Vasconcelos

JFormDesigner + Eclipse :smiley:

Criado 28 de março de 2008
Ultima resposta 31 de mar. de 2008
Respostas 3
Participantes 3