Duvida de Envio Chat Sockets com Threads

Ola para todos!

Então camaradas… estou com um problema, preciso fazer um chat com Threads e Sockets! Estou utlizando um Thread somente no servidor inicializado somente quando a Texto a ser enviado pela ação do botão enviarButton na Classe Cliente, só que só funciona uma unica vez, nas outras vezes que escrevo no textArea e aperto no botão enviar ele não envia.

desde de já muito obrigado as camaradas que me derem uma mão

Código Classe Cliente:


import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Keymap;


public class Cliente extends javax.swing.JFrame implements Runnable {

    private String nome = "Filipe";
    private String chat;
    private Socket conexao;

    /** Creates new form Cliente */
    public Cliente() throws UnknownHostException, IOException {
        initComponents();
        //nome = JOptionPane.showInputDialog("Entre com o Seu NickName:");
        conexao = new Socket("127.0.0.1",5000);
    }

    
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane2 = new javax.swing.JScrollPane();
        dialogText = new javax.swing.JTextArea();
        panelMensag = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        mensagText = new javax.swing.JTextArea();
        panelDialog = new javax.swing.JPanel();
        enviarButton = new javax.swing.JButton();
        enviarArqButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        dialogText.setColumns(20);
        dialogText.setRows(5);
        dialogText.setEnabled(false);
        jScrollPane2.setViewportView(dialogText);

        getContentPane().add(jScrollPane2);
        jScrollPane2.setBounds(10, 20, 380, 140);

        panelMensag.setBorder(javax.swing.BorderFactory.createTitledBorder("Mensagem"));

        mensagText.setColumns(20);
        mensagText.setRows(5);
        jScrollPane1.setViewportView(mensagText);

        javax.swing.GroupLayout panelMensagLayout = new javax.swing.GroupLayout(panelMensag);
        panelMensag.setLayout(panelMensagLayout);
        panelMensagLayout.setHorizontalGroup(
            panelMensagLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE)
        );
        panelMensagLayout.setVerticalGroup(
            panelMensagLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelMensagLayout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        getContentPane().add(panelMensag);
        panelMensag.setBounds(0, 170, 400, 100);

        panelDialog.setBorder(javax.swing.BorderFactory.createTitledBorder("Dialogo"));

        javax.swing.GroupLayout panelDialogLayout = new javax.swing.GroupLayout(panelDialog);
        panelDialog.setLayout(panelDialogLayout);
        panelDialogLayout.setHorizontalGroup(
            panelDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 388, Short.MAX_VALUE)
        );
        panelDialogLayout.setVerticalGroup(
            panelDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 143, Short.MAX_VALUE)
        );

        getContentPane().add(panelDialog);
        panelDialog.setBounds(0, 0, 400, 170);

        enviarButton.setText("Enviar");
        enviarButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                enviarButtonActionPerformed(evt);
            }
        });
        getContentPane().add(enviarButton);
        enviarButton.setBounds(150, 280, 80, 23);

        enviarArqButton.setText("Enviar Arquivo");
        getContentPane().add(enviarArqButton);
        enviarArqButton.setBounds(250, 280, 120, 23);

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

    private void enviarButtonActionPerformed(java.awt.event.ActionEvent evt) {                                             
        run();
    }                                            

   

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) throws UnknownHostException, IOException {
       Cliente cliente = new Cliente();
       cliente.setVisible(true);
       cliente.setSize(415,360);
       cliente.setLocation(500, 300);
 }

    // Variables declaration - do not modify                     
    private javax.swing.JTextArea dialogText;
    private javax.swing.JButton enviarArqButton;
    private javax.swing.JButton enviarButton;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextArea mensagText;
    private javax.swing.JPanel panelDialog;
    private javax.swing.JPanel panelMensag;
    // End of variables declaration                   

    public void run() {
        
        chat = mensagText.getText();
            dialogText.setText(dialogText.getText()+">"+nome+": "+chat+"\n");

            try{
		 ObjectOutputStream saida = new ObjectOutputStream(conexao.getOutputStream());
                 //saida.writeObject(nome);
                 saida.writeObject(chat);
            }catch (Exception e) {}

       mensagText.setText("");
    }

}

Código da Classe Servidor:


import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Vector;

public class Servidor extends javax.swing.JFrame implements Runnable {

   // private static Vector clientes;
    private Socket conexao;
    //private String meuNome;
    /** Creates new form Servidor */
    public Servidor(Socket c) {
        initComponents();
        conexao = c;
        setVisible(true);
        setSize(600, 400);
        setLocation(500, 300);
        //this.run();
    }

  
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        panelDialog = new javax.swing.JPanel();
        scrollDialog = new javax.swing.JScrollPane();
        dialogText = new javax.swing.JTextArea();
        panelConec = new javax.swing.JPanel();
        scrollConec = new javax.swing.JScrollPane();
        conecText = new javax.swing.JTextArea();
        panelMensag = new javax.swing.JPanel();
        scrollMensag = new javax.swing.JScrollPane();
        mensagText = new javax.swing.JTextArea();
        enviarButton = new javax.swing.JButton();
        enviarArqButton = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(null);

        panelDialog.setBorder(javax.swing.BorderFactory.createTitledBorder("Dialogo"));

        dialogText.setColumns(20);
        dialogText.setRows(5);
        scrollDialog.setViewportView(dialogText);

        javax.swing.GroupLayout panelDialogLayout = new javax.swing.GroupLayout(panelDialog);
        panelDialog.setLayout(panelDialogLayout);
        panelDialogLayout.setHorizontalGroup(
            panelDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDialogLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(scrollDialog, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelDialogLayout.setVerticalGroup(
            panelDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelDialogLayout.createSequentialGroup()
                .addComponent(scrollDialog, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
                .addContainerGap())
        );

        getContentPane().add(panelDialog);
        panelDialog.setBounds(0, 0, 410, 190);

        panelConec.setBorder(javax.swing.BorderFactory.createTitledBorder("Usuarios Conec."));

        conecText.setColumns(20);
        conecText.setRows(5);
        scrollConec.setViewportView(conecText);

        javax.swing.GroupLayout panelConecLayout = new javax.swing.GroupLayout(panelConec);
        panelConec.setLayout(panelConecLayout);
        panelConecLayout.setHorizontalGroup(
            panelConecLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelConecLayout.createSequentialGroup()
                .addComponent(scrollConec, javax.swing.GroupLayout.DEFAULT_SIZE, 188, Short.MAX_VALUE)
                .addContainerGap())
        );
        panelConecLayout.setVerticalGroup(
            panelConecLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelConecLayout.createSequentialGroup()
                .addComponent(scrollConec, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
                .addContainerGap())
        );

        getContentPane().add(panelConec);
        panelConec.setBounds(410, 0, 210, 190);

        panelMensag.setBorder(javax.swing.BorderFactory.createTitledBorder("Mensagem"));

        mensagText.setColumns(20);
        mensagText.setRows(5);
        scrollMensag.setViewportView(mensagText);

        javax.swing.GroupLayout panelMensagLayout = new javax.swing.GroupLayout(panelMensag);
        panelMensag.setLayout(panelMensagLayout);
        panelMensagLayout.setHorizontalGroup(
            panelMensagLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelMensagLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(scrollMensag, javax.swing.GroupLayout.PREFERRED_SIZE, 590, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        panelMensagLayout.setVerticalGroup(
            panelMensagLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelMensagLayout.createSequentialGroup()
                .addComponent(scrollMensag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        getContentPane().add(panelMensag);
        panelMensag.setBounds(0, 190, 620, 130);

        enviarButton.setText("Enviar");
        enviarButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                enviarButtonActionPerformed(evt);
            }
        });
        getContentPane().add(enviarButton);
        enviarButton.setBounds(250, 340, 90, 23);

        enviarArqButton.setText("Enviar Arquivo");
        getContentPane().add(enviarArqButton);
        enviarArqButton.setBounds(390, 340, 110, 23);

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

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

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]){
        try{
            ServerSocket s = new ServerSocket(5000);
            while (true){
                System.out.print("Esperando alguem se conectar...");
		Socket conexao = s.accept();
		System.out.print( "Conectou!");
		Servidor servidor = new Servidor(conexao);
                /*servidor.setVisible(true);
                servidor.setSize(600, 400);
                servidor.setLocation(500, 300);*/
		servidor.run();
            }
       }catch (IOException e) { }
    }

    // Variables declaration - do not modify                     
    private javax.swing.JTextArea conecText;
    private javax.swing.JTextArea dialogText;
    private javax.swing.JButton enviarArqButton;
    private javax.swing.JButton enviarButton;
    private javax.swing.JTextArea mensagText;
    private javax.swing.JPanel panelConec;
    private javax.swing.JPanel panelDialog;
    private javax.swing.JPanel panelMensag;
    private javax.swing.JScrollPane scrollConec;
    private javax.swing.JScrollPane scrollDialog;
    private javax.swing.JScrollPane scrollMensag;
    // End of variables declaration                   


    private void criar(){

    }

    public void run() {
       // throw new UnsupportedOperationException("Not supported yet.");
        try{
            while(true){
            ObjectInputStream entrada = new ObjectInputStream(conexao.getInputStream());
            //String meuNome = (String)entrada.readObject();
            //conecText.setText(">Usuario: "+meuNome);
   	
           // if (meuNome == null){
   		//return;
           // }

            //clientes.add(saida);
            String linha = (String)entrada.readObject();

            while (linha != null && !(linha.trim().equals(""))){
                dialogText.setText(dialogText.getText()+" digitou :"+linha+"\n");
                linha = (String)entrada.readObject();
            }

           // sendToAll(saida, " saiu ", "do chat!");
            //clientes.remove(saida);
                conexao.close();
            }
            
	}catch (Exception e) {}
    }

    /*public void sendToAll(ObjectOutputStream saida, String acao, String linha) throws IOException{

        Enumeration e = clientes.elements();

        while (e.hasMoreElements()){
            ObjectOutputStream chat = (ObjectOutputStream) e.nextElement();
            if (saida != chat)
   		chat.writeObject(meuNome + acao + linha);
            }
    }*/

}