I have a client and server running to send messages from a Chat application but give me an error in the console when I try to write a message. Can someone explain the error?
Console error
Cliente ligou-se ao servidor
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at janela.PainelMensagens.escreverMensagem(PainelMensagens.java:73)
at janela.PainelMensagens$ButtonActionListener.keyPressed(PainelMensagens.java:106)
at java.awt.Component.processKeyEvent(Component.java:6493)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2832)
at java.awt.Component.processEvent(Component.java:6312)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1954)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:806)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1074)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:945)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:771)
at java.awt.Component.dispatchEventImpl(Component.java:4762)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Window.dispatchEventImpl(Window.java:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
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 ButtonActionListener buttonListener;
public PainelMensagens(JanelaUtilizador janelaUtilizador) {
this.janelaUtilizador = janelaUtilizador;
buttonListener = new ButtonActionListener();
setLayout(new BorderLayout());
criarPainelEscrita();
criarPainelLeitura();
}
private void criarPainelEscrita(){
JPanel painelEscrita = new JPanel();
painelEscrita.setLayout(new BorderLayout());
zonaEscreverMensagens = new JTextField();
zonaEscreverMensagens.addKeyListener(buttonListener);
botaoEnviar = new JButton("Enviar");
botaoEnviar.addActionListener(buttonListener);
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 void escreverMensagem(){
estadoMensagem = EstadoMensagem.ENVIADA;
String mensagemEnviada = "Eu: " + zonaEscreverMensagens.getText();
zonaReceberMensagens.setText(zonaReceberMensagens.getText() + mensagemEnviada + " " + estadoMensagem.getEstado() + "\n");
zonaEscreverMensagens.setText(""); //depois de escrever uma mensagem a zona de escrever mensagens passa a estar limpa
Contacto contacto = janelaUtilizador.getPainelContactos().getListaContactos().getSelectedValue();
Mensagem mensagem = new Mensagem(contacto, mensagemEnviada);
contacto.getMensagens().add(mensagem);
}
public EstadoMensagem getEstadoMensagem() {
return estadoMensagem;
}
public JTextField getZonaEscreverMensagens() {
return zonaEscreverMensagens;
}
public JTextArea getZonaReceberMensagens() {
return zonaReceberMensagens;
}
class ButtonActionListener implements ActionListener, KeyListener{
@Override
public void actionPerformed(ActionEvent e) {
escreverMensagem();
}
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
escreverMensagem();
}
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
}
}