Reparem nessas duas classes java.
O cliente manda mensagens para o servidor. O JList da GUI do servidor é preenchido conforme chegam mensagens, mas o JList da GUI do cliente não é alterado quando o servidor manda mensagens.
Alguém tem alguma dica para consertar, sem alterar muito a lógica das classes?
Classe ServidorEco:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class ServidorEco implements ActionListener {
private JFrame janela = new JFrame("Servidor");
private JLabel servidorLabel = new JLabel("Mensagem para o cliente:");
private JLabel clienteLabel = new JLabel("Mensagem do cliente:");
private JTextField servidorText = new JTextField("Digite sua mensagem para o cliente", 30);
private DefaultListModel defaultListModel = new DefaultListModel();
private JList clienteList = new JList();
private JScrollPane scroll = new JScrollPane(clienteList);
private JPanel panel = new JPanel();
private JButton servidorButton = new JButton("Enviar");
private ServerSocket serverSocket = null;
private Socket socket;
private BufferedReader entrada = null;
private PrintStream saida = null;
private String linha;
private BufferedReader teclado = null;
/** Creates a new instance of ServidorEco */
public ServidorEco() {
janela.setLayout(new FlowLayout());
janela.setSize(640, 240);
janela.setResizable(false);
janela.add(servidorLabel);
janela.add(servidorText);
janela.add(servidorButton);
panel.add(clienteLabel);
panel.add(scroll);
janela.add(panel);
janela.setVisible(true);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
servidorButton.addActionListener(this);
try {
serverSocket = new ServerSocket(4256);
while(true) {
System.out.print("Esperando alguém se conectar...");
socket = serverSocket.accept();
System.out.println("Conectou!");
entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
saida = new PrintStream(socket.getOutputStream());
linha = entrada.readLine();
while(linha != null && ! linha.trim().equals("")) {
saida.println("Eco: " + linha);
linha = entrada.readLine();
//
defaultListModel.addElement(linha);
clienteList.setModel(defaultListModel);
//
}
socket.close();
}
}
catch(IOException ioe) {
System.out.println(ioe);
}
}
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == servidorButton && ! servidorText.getText().trim().equals(""))
saida.println(servidorText.getText());
}
public static void main(String[] args) {
ServidorEco se = new ServidorEco();
}
}
Classe ClienteEco:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class ClienteEco implements ActionListener {
private JFrame janela = new JFrame("Cliente");
private JLabel clienteLabel = new JLabel("Mensagem para o servidor:");
private JLabel servidorLabel = new JLabel("Mensagem do servidor:");
private JTextField clienteText = new JTextField("Digite sua mensagem para o servidor", 30);
private DefaultListModel defaultListModel = new DefaultListModel();
private JList servidorList = new JList();
private JScrollPane scroll = new JScrollPane(servidorList);
private JPanel panel = new JPanel();
private JButton clienteButton = new JButton("Enviar");
private Socket socket = null;
private BufferedReader entrada = null;
private PrintStream saida = null;
private String linha;
private BufferedReader teclado = null;
/** Creates a new instance of ClienteEco */
public ClienteEco() {
janela.setLayout(new FlowLayout());
janela.setSize(640, 240);
janela.setResizable(false);
janela.add(clienteLabel);
janela.add(clienteText);
janela.add(clienteButton);
panel.add(servidorLabel);
panel.add(scroll);
janela.add(panel);
janela.setVisible(true);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
clienteButton.addActionListener(this);
try {
socket = new Socket("127.0.0.1", 4256);
entrada = new BufferedReader(new InputStreamReader(socket.getInputStream()));
saida = new PrintStream(socket.getOutputStream());
teclado = new BufferedReader(new InputStreamReader(System.in));
while(true) {
System.out.print("> ");
linha = teclado.readLine();
saida.println(linha);
linha = entrada.readLine();
//
defaultListModel.addElement(linha);
servidorList.setModel(defaultListModel);
//
if(linha == null) {
System.out.println("Conexão encerrada!");
break;
}
System.out.println(linha);
}
}
catch(IOException ioe) {
System.out.println(ioe);
}
}
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == clienteButton && ! clienteText.getText().trim().equals(""))
saida.println(clienteText.getText());
}
public static void main(String[] args) {
ClienteEco ce = new ClienteEco();
}
}