jTextArea2.setText(s); nao funciona da um ajuda!

seguinte para aprendizado eu fiz um chat utilizando socket e 2 jTextArea

um pra mandar as mensagens outros pra receber o de mandar ta blza o de receber tb so que na hora de mandar pro jTextArea2 nao vai nao entendo vo colar os codigos

// Abre o Thread socket
public void run(){
while(true){
receber();
}
}

// crianda input e mandando pra outra funcao ate ai blza
public void receber(){

    try {
        
        entrada = new  DataInputStream(socket2.getInputStream());
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    try {
        //System.out.println(entrada.readLine());
      
        String me = entrada.readLine();
       tela porra = new tela();
       porra.imprimir(me);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

// o problema esta aki ele imprime a linha mais nao poe o conteudo em
//jTextArea2
public void imprimir(String s){

    linha = s;
    System.out.println(linha);
  jTextArea2.setText(linha);
    
    
    
}

obrigado aee…

O setText deve ser usado apenas na Thread da AWT, nunca numa thread separada.

Tente trocar
jTextArea2.setText(linha);

por

EventQueue.invokeLater(new Runnable() {
  public void run() {
       jTextArea2.setText(linha);
   }
});

Este comando empilha o pedido do setText na fila de mensagens da AWT.

nao funciono tb deu erro o jTextArea2 nao é static …

Você pode estar mudando o texto de um jTextAreade uma outra instância do formulário (eu já fiz isso sem quere, crei 2 instâncias sem querer e ele acabou mudando na instância que não estava visível).

Da alguma exceção em runtime?
Tenta com o método append() pra ver o que dá.

Tenta assim então:


jFrame.jTextArea.setText()

Edit.: É como o cara abaixo falou, precisa ser final tb.

O textarea não precisa ser static, só final. Para isso:

final JTextArea jTextAreaFinal = jTextArea2;

EventQueue.invokeLater(new Runnable() {
   public void run() {
        jTextAreaFinal.setText(linha);
    }
 });

po galera mto obrigado pelas dicas