Chat não recebe texto digitado

3 respostas
M
ENtão, o Chat que fiz, não está recebendo o que é digitado tanto pelo cliente quanto pelo servidor.
package Redes;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class ChatCliente extends JFrame {

	JTextField textoParaEnviar;
	Socket socket;
	PrintWriter escritor;
	String nome;
	JTextArea textoRecebido;
	Scanner leitor;
	
	private class EscutaServidor implements Runnable {

		@Override
		public void run() {
			try {
			String texto;
				while((texto = leitor.nextLine()) != null) {
					textoRecebido.append(texto + "\n");
				}
			} catch(Exception e) {}
		}
		
	}
	
	public ChatCliente(String nome) {
		super("Chat:" + nome);
		this.nome = nome;
		
		Font fonte = new Font("Serif", Font.PLAIN, 26);
		textoParaEnviar = new JTextField();
		textoParaEnviar.setFont(fonte);
		JButton botao = new JButton("Enviar");
		botao.setFont(fonte);
		botao.addActionListener(new EnviarListener());
		Container envio = new JPanel();
		envio.setLayout(new BorderLayout());
		envio.add(BorderLayout.CENTER, textoParaEnviar);
		envio.add(BorderLayout.EAST, botao);
				
		textoRecebido = new JTextArea();
		textoRecebido.setFont(fonte);
		JScrollPane scroll = new JScrollPane(textoRecebido);
		
		getContentPane().add(BorderLayout.CENTER, scroll);
		getContentPane().add(BorderLayout.SOUTH, envio);
		
		configurarRede();
		
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(500, 500);
		setResizable(false);
		setVisible(true);
	}
	
	public class EnviarListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			escritor.println(nome + " : " + textoParaEnviar);
			escritor.flush();
			textoParaEnviar.setText("");
			textoParaEnviar.requestFocus();
		}
	}
	
	private void configurarRede() {
		try {
			socket = new Socket("127.0.0.1", 5000);
			escritor = new PrintWriter(socket.getOutputStream());
			leitor = new Scanner(socket.getInputStream());
			new Thread(new EscutaServidor()).start();
		} catch (Exception e) {}
	}
	
	public static void main(String[] args) {
		new ChatCliente("Michael");
		new ChatCliente("Francieli");
	}

}
package Redes;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class ChatServer {
	
	List<PrintWriter> escritores = new ArrayList<>();

	public ChatServer() {
		ServerSocket server;
		try {
			server = new ServerSocket(5000);
			while(true) {
				Socket socket = server.accept();
				new Thread(new EscutaCliente(socket)).start();
				PrintWriter p = new PrintWriter(socket.getOutputStream());
				escritores.add(p);
			}
		} catch (IOException e) {}
	}

	private void encaminhaParaTodos(String texto) {
		for (PrintWriter w : escritores) {
			try {
				w.println(texto);
				w.flush();
			} catch(Exception e) {}
		}
	}
	
	private class EscutaCliente implements Runnable {

		Scanner leitor;
		public EscutaCliente(Socket socket) {
			try {
				leitor = new Scanner(socket.getInputStream());
			} catch (IOException e) {}
		}
		
		@Override
		public void run() {
			try {
				String texto;
				while((texto = leitor.nextLine()) !=null) {
					System.out.println("Recebeu: " + texto);
					encaminhaParaTodos(texto);
				}
			} catch(Exception e) {}
		}
	}
	
	public static void main(String[] args) {
		new ChatServer();
	}

}

3 Respostas

M

.

W

Amigo o problema está nessa parte de seu codigo.

public class EnviarListener implements ActionListener {  
  
        @Override  
        public void actionPerformed(ActionEvent e) {  
            escritor.println(nome + " : " + textoParaEnviar); // O TESTE QUE ERÁ PARA ESTÁ NO  textoParaEnviar não está setado
            escritor.flush();  
            textoParaEnviar.setText("");  
            textoParaEnviar.requestFocus();  
        }  
    }
M

Obrigado, funcionou agora, uma coisinha de nada que deu dor de cabeça…

Criado 1 de agosto de 2012
Ultima resposta 2 de ago. de 2012
Respostas 3
Participantes 2