Exibir testo em txtArea em aplicação cliente/servidor

Boas galera, tudo bem?

sou novo em programação cliente/servidor e relativamente novo com programação visual em Java também.

gostaria de saber como faço para exibir textos em um textarea, tentei o txtArea.append mas não obtive resultados ainda.

abaixo a classe em que desejo imprimir as mensagens:


import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JOptionPane;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * servidor.java
 *
 * Created on 22/05/2010, 10:07:48
 */

/**
 *
 * @author R
 */
public class servidor extends javax.swing.JFrame {

    ServerSocket socketServidor; //cria socket do servidor
    Socket conexaoServidor;
    ObjectInputStream msgeS;           //input Stream irá captar a entrada de dados
    ObjectOutputStream msgsS;          //output Stream irá captar a saída de dados

    /** Creates new form servidor */

    public servidor() {
        initComponents();
    }
    
    public void runServer() throws ClassNotFoundException, IOException{
        
        String msgDoCliente ="";


        
        try {

          socketServidor = new ServerSocket(5000,3); //Tenta criar um Socket no servidor para conexão do cliente
          while(true){// INICIO DO WHILE
          
          txtAreaServidor.append("Aguardando conexão...");
            
          // Conecta
          conexaoServidor = socketServidor.accept();
          txtAreaServidor.append("Conexão estabelecida");
         // Prepara Entrada e Saída
          
          msgeS = new ObjectInputStream(conexaoServidor.getInputStream()); // captura buffer de entrada

          msgsS = new ObjectOutputStream(conexaoServidor.getOutputStream()); // captura buffer de saída
          msgsS.flush(); //limpa buffer de saida;
          txtAreaServidor.append("Entrada/Saída de dados OK");

        
           do{

               //System.out.println("Aguardando mensagem do cliente");
               
               msgDoCliente = (String)msgeS.readObject(); // Lê o Buffer de entrada do servidor, faz um "Cast" e converte para String
               txtAreaServidor.append(" Recebida :" + msgDoCliente); //Exibe a Mensagem na Tela

               msgsS.writeObject("Chegou"); // Escreve no Buffer de saída do servidor, onde o cliente irá ler
               txtAreaServidor.append("Retornando que chegou"); // Escreve no servidor também para confirmar a chegada


            }while(!msgDoCliente.equalsIgnoreCase("sair"));

        }// FIM DO WHILE
            
        } catch (IOException ex) {
           JOptionPane.showMessageDialog(null,"Falha na Conexão");
        }

        finally{ // Depois de tudo ...

            //System.out.println(" Encerrando Conexão ");

            msgsS.close(); //Fecha o Buffer de saída
            msgeS.close(); //Fechar o Buffer de Entrada
            conexaoServidor.close(); //Fecha a conexão
         }

    }



    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        panelServidor = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        txtAreaServidor = new javax.swing.JTextArea();
        txtFieldServidor = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBounds(new java.awt.Rectangle(0, 0, 0, 0));
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        setMinimumSize(new java.awt.Dimension(500, 400));
        setName("servidor"); // NOI18N
        setResizable(false);

        panelServidor.setBackground(new java.awt.Color(204, 204, 255));

        txtAreaServidor.setColumns(20);
        txtAreaServidor.setEditable(false);
        txtAreaServidor.setRows(5);
        jScrollPane1.setViewportView(txtAreaServidor);

        txtFieldServidor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txtFieldServidorActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelServidorLayout = new javax.swing.GroupLayout(panelServidor);
        panelServidor.setLayout(panelServidorLayout);
        panelServidorLayout.setHorizontalGroup(
            panelServidorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelServidorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelServidorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 645, Short.MAX_VALUE)
                    .addComponent(txtFieldServidor, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 645, Short.MAX_VALUE))
                .addContainerGap())
        );
        panelServidorLayout.setVerticalGroup(
            panelServidorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelServidorLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 337, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(txtFieldServidor, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelServidor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelServidor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    private void txtFieldServidorActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        // TODO add your handling code here:
    }                                                

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {

        servidor novoServidor = new servidor();


        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new servidor().setVisible(true);
                servidor novoServidor = new servidor();
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPanel panelServidor;
    private javax.swing.JTextArea txtAreaServidor;
    private javax.swing.JTextField txtFieldServidor;
    // End of variables declaration

}

É com append mesmo, mas seu servidor deverá rodar numa thread separada.

Como fazer para o seu servidor deverá rodar numa thread separada.

Rafael T.

to tentando fazer um deses programinha ai para enviar mesg…
fiz assim mais a sua parte me ajuda mais nao estou conseguindo implementar no meu projeto?


package Projeto;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Email extends JFrame implements ActionListener, KeyListener {

ServerSocket socketServidor; //cria socket do servidor   
Socket conexaoServidor;   
ObjectInputStream msgeS;           //input Stream irá captar a entrada de dados   
ObjectOutputStream msgsS;          //output Stream irá captar a saída de dados 


public JTextField texto1 = this.addJTextField(48, 35, 661, 25);
public JTextField texto2 = this.addJTextField(48, 60, 661, 25);
public JTextField texto3 = this.addJTextField(62, 85, 646, 25);

JTextArea a = this.addJTextArea(10, 130, 700, 350);

public JTextField getT1(){
	return texto1;
}

public JTextField getT2() {
	return texto2;
}

public JTextField getT3() {
	return texto3;
}



public JTextArea getA() {
	return a;
}

public Email(){
	
	this.setLayout(null);
	this.setResizable(false);
	this.setBounds(0, 0, 800, 600);
	this.setTitle("E-mail Eletronico");
	
	final Dimension resolucao = Toolkit.getDefaultToolkit().getScreenSize();				
	this.setSize(750, 600); 														
	this.setLocation(((resolucao.width - 750) / 2),((resolucao.height - 600) / 2));	
	
	
	this.addJLabel("De:", 10, 40, 100, 10);
	this.addJLabel("Para:", 10, 65, 100, 10);
	this.addJLabel("Assunto:", 10, 90, 100, 10);
	this.addJLabel("Mensagem:", 10, 115, 100, 10);
	
	this.addJButton("Enviar", 75, 520, 193, 40);
	this.addJButton("Limpar", 288, 520, 193, 40);
	this.addJButton("Fechar", 501, 520, 193, 40);
	
	this.setVisible(true);
}

public JFrame addJFrame(final String texto, final int x, final int y, final int w, final int h){
	final JFrame f = new JFrame(texto);
	f.setBounds(x, y, w, h);
	this.setLayout(null);
	this.setVisible(true);
	return f;
}

public JTextField addJTextField(final int x, final int y, final int w, final int h){
	final JTextField t = new JTextField();
	t.setBounds(x, y, w, h);
	t.addKeyListener(this);
	this.add(t);
	return t;
}

public JLabel addJLabel(final String texto, final int x, final int y, final int w, final int h){
	final JLabel l = new JLabel(texto);
	l.setBounds(x, y, w, h);
	this.add(l);
	return l;
}

public JButton addJButton(final String texto, final int x, final int y, final int w, final int h){
	final JButton b = new JButton(texto);
	b.setBounds(x, y, w, h);
	b.addActionListener(this);
	this.add(b);
	return b;
}

public JTextArea addJTextArea(final int x, final int y, final int w, final int h){
	final JTextArea a = new JTextArea();
	a.setBounds(x, y, w, h);
	a.addKeyListener(this);
	this.add(a);
	return a;
}

public void addAlerta(){
	
	final Dimension resolucao = Toolkit.getDefaultToolkit().getScreenSize();	
	final JFrame f = addJFrame(" E-mail Eletronico",
			((resolucao.width - 400) / 2), ((resolucao.height - 150) / 2), 400, 150);
	f.setResizable(false);
	f.setLayout(null);
	f.setVisible(true);
	
	final JButton ok = addJButton("Ok", 150, 60, 100, 30);
	f.add(ok);
	
	final JLabel l = addJLabel("Mensagem enviada com sucesso!", 100, 20, 400, 30);
	f.add(l);
}

public void Enviar(){
	System.out.println(a.getText());
	System.out.println();
	addAlerta();
	// . . .
}

public void Limpar(){
	a.setText("");
}

public void Fechar(){
	System.exit(0);
}

public static void main(final String[] args) {
	new Email();
}

public void keyPressed(final KeyEvent e) {
}

public void keyReleased(final KeyEvent e) {
}

public void keyTyped(final KeyEvent e) {
}



    public void actionPerformed(final ActionEvent e) {
	final JButton botao = (JButton) e.getSource();
	if(botao.getText().equals("Fechar"))
		Fechar();
	if(botao.getText().equals("Limpar"))
		Limpar();
	if(botao.getText().equals("Enviar"))
		Enviar();
	if(botao.getText().equals("Ok"))
		Fechar();
	
	
	
	    }
	
    }

Por favor, ao apostar códigos, use a tag code:

Seu código aqui

Cara, Obrigado pela ajuda…

você poderia me exemplificar e explicar o por que da necessidade de rodar em uma thread separada? O cliente também deve rodar em uma thread separada?

A thread do Swing deve ficar livre para pintar sua tela. Se você ocupa-la, digamos, esperando uma mensagem do servidor, ela nunca processará o evento de pintura. Entenda que uma thread representa um único fluxo de código só. É como se o Swing tivesse um while assim, dentro dele:

while (true) { processarEventos(); pintarTela(); }

Se você segurar o while na hora de processar seus eventos (como o de botão), o comando pintarTela() nunca será chamado. A solução é então você criar uma thread separada, que permita que esse while continue rodando, enquanto sua aplicação espera a mensagem.

Blz cara! agora foi! Brigadao