I have the following code, however, when I run the server and the client and try to send messages from the client (frame window) of the error! Can someone help me? The error is supposed to be the class Panel messages in the send button on the actionlistener
public class PainelMensagens extends JPanel{
private static final long serialVersionUID = 1L;
private EstadoMensagem estadoMensagem = null;
private JButton botaoEnviar;
private JTextField zonaEscreverMensagens;
private JTextArea zonaReceberMensagens;
private JanelaUtilizador janelaUtilizador;
private Mensagem mensagem;
private SocketCliente socketCliente;
public PainelMensagens(JanelaUtilizador janelaUtilizador) {
this.janelaUtilizador = janelaUtilizador;
setLayout(new BorderLayout());
criarPainelEscrita();
criarPainelLeitura();
}
private void criarPainelEscrita(){
JPanel painelEscrita = new JPanel();
painelEscrita.setLayout(new BorderLayout());
zonaEscreverMensagens = new JTextField();
botaoEnviar = new JButton("Enviar");
botaoEnviar.addActionListener(e->{
String texto = this.zonaEscreverMensagens.getText();
String nome = this.mensagem.getNome();
if(!texto.isEmpty()){
this.mensagem = new Mensagem();
this.mensagem.setNome(nome);
this.mensagem.setMensagem(texto);
this.mensagem.setAccao(Accao.ENVIAR_TODOS);
this.socketCliente.enviar(this.mensagem);
}
this.zonaEscreverMensagens.setText("");
});
painelEscrita.add(zonaEscreverMensagens, BorderLayout.CENTER);
painelEscrita.add(botaoEnviar, BorderLayout.EAST);
add(painelEscrita, BorderLayout.SOUTH);
}
private void criarPainelLeitura(){
zonaReceberMensagens = new JTextArea();
zonaReceberMensagens.setEditable(false);
add(zonaReceberMensagens, BorderLayout.CENTER);
}
public EstadoMensagem getEstadoMensagem() {
return estadoMensagem;
}
public JTextField getZonaEscreverMensagens() {
return zonaEscreverMensagens;
}
public JTextArea getZonaReceberMensagens() {
return zonaReceberMensagens;
}
public JanelaUtilizador getJanelaUtilizador() {
return janelaUtilizador;
}
public JButton getBotaoEnviar() {
return botaoEnviar;
}
}
public class PainelEstadoContacto extends JPanel{
private static final long serialVersionUID = 1L;
private JanelaUtilizador janelaUtilizador;
private JButton botaoOnline;
private JButton botaoOffline;
private JTextField nomeUtilizador;
private Socket socket;
private Mensagem mensagem;
private SocketCliente socketCliente;
public PainelEstadoContacto(JanelaUtilizador janelaUtilizador) {
this.janelaUtilizador=janelaUtilizador;
botaoOnline= new JButton("ONLINE");
botaoOnline.addActionListener(e -> {
String nome = nomeUtilizador.getText();
if(!nome.isEmpty()){
this.mensagem = new Mensagem();
this.mensagem.setAccao(Accao.ONLINE);
this.mensagem.setNome(nome);
this.socketCliente = new SocketCliente();
this.socket = this.socketCliente.conectar();
//Criar thread para iniciar processo
new Thread(new ListenerSocket(this.socket)).start();
}
this.socketCliente.enviar(mensagem);
});
botaoOffline=new JButton("OFFLINE");
botaoOffline.addActionListener(e->{
this.mensagem.setAccao(Accao.OFFLINE);
this.socketCliente.enviar(this.mensagem);
desconectar(mensagem);
});
setLayout(new GridLayout(1,3));
JPanel painel = new JPanel();
painel.setLayout(new BorderLayout());
JLabel utilizador = new JLabel("Utilizador:");
nomeUtilizador = new JTextField();
painel.add(utilizador, BorderLayout.NORTH);
painel.add(nomeUtilizador, BorderLayout.SOUTH);
add(painel);
add(botaoOnline);
add(botaoOffline);
}
public JanelaUtilizador getJanelaUtilizador() {
return janelaUtilizador;
}
private class ListenerSocket implements Runnable {
private ObjectInputStream input ;
public ListenerSocket(Socket socket) {
try {
this.input = new ObjectInputStream(socket.getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() {
Mensagem mensagem = null;
try {
while((mensagem = (Mensagem) input.readObject()) != null){
Accao accao = mensagem.getAccao(); //receber accao por parte do servidor
if(accao.equals(accao.ONLINE)){
conectado(mensagem);
}else if(accao.equals(accao.OFFLINE)){
desconectar(mensagem);
socket.close();
}else if(accao.equals(accao.ENVIAR_UM)){
receberMensagem(mensagem);
}else if(accao.equals(accao.CONTACTOS_ONLINE)){
atualizarLista(mensagem);
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void conectado(Mensagem mensagem){
if(mensagem.getMensagem().equals("Não conectado!")){
this.nomeUtilizador.setText("");
JOptionPane.showMessageDialog(this, "Conexão sem sucesso \n Introduzir outro nome");
return ;
}
this.mensagem = mensagem;
// this.botaoOnline.setEnabled(false);
// this.nomeUtilizador.setEditable(false);
//
// this.botaoOffline.setEnabled(true);
//
// //this.textoEnviado.setEditable(true);
// this.janelaUtilizador.getPainelMensagens().getZonaEscreverMensagens().setEditable(true);
//
// //this.botaoEnviar.setEnabled(true);
// this.janelaUtilizador.getPainelMensagens().getBotaoEnviar().setEnabled(true);
// //this.botaoAtualizarLista.setEnabled(true);
// this.janelaUtilizador.getPainelMensagens()
//this.textoRecebido.append(mensagem.getNome() + "\n");
this.janelaUtilizador.getPainelMensagens().getZonaReceberMensagens().append(mensagem.getNome() + "\n");
JOptionPane.showMessageDialog(this, "Conectado ao QuequeAPP");
}
private void desconectar(Mensagem mensagem){
this.botaoOnline.setEnabled(true);
this.nomeUtilizador.setEditable(true);
this.botaoOffline.setEnabled(false);
// this.textoEnviado.setEditable(false);
// this.botaoEnviar.setEnabled(false);
// this.botaoApagar.setEnabled(false);
// this.botaoAtualizarLista.setEnabled(false);
JOptionPane.showMessageDialog(this, "OFFLINE");
}
private void receberMensagem(Mensagem mensagem){
// this.textoRecebido.append(mensagem.getNome() + " diz:" + mensagem.getMensagem() + "\n");
this.janelaUtilizador.getPainelMensagens().getZonaReceberMensagens().append(mensagem.getNome() + " diz: " + mensagem.getMensagem() + "\n");
}
private void atualizarLista(Mensagem mensagem) {
}
}
public class JanelaUtilizador {
private PainelContactos painelContactos;
private PainelMensagens painelMensagens;
private PainelEstadoContacto painelEstadoContacto;
private JFrame janela;
private Cliente cliente;
public JanelaUtilizador(Cliente cliente){
this.cliente = cliente;
painelContactos = new PainelContactos(this);
painelMensagens = new PainelMensagens(this);
painelEstadoContacto = new PainelEstadoContacto(this);
criarJanela();
janela.validate();
janela.setVisible(true);
}
public void criarJanela(){
janela = new JFrame("QuequeApp");
janela.setLayout(new BorderLayout());
janela.setLocation(400,100);
janela.setSize(500, 500);
janela.add(painelContactos, BorderLayout.WEST);
janela.add(painelMensagens, BorderLayout.CENTER);
janela.add(painelEstadoContacto, BorderLayout.NORTH);
janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public Cliente getCliente() {
return cliente;
}
public JFrame getJanela() {
return janela;
}
public PainelContactos getPainelContactos() {
return painelContactos;
}
public PainelMensagens getPainelMensagens() {
return painelMensagens;
}
}
Error Message