Client - Server error console

2

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

    }

}

}

    
asked by anonymous 01.12.2015 / 01:48

1 answer

1

This is giving NullPointerException, you are using the keypressed event so the moment you click inside the inputText it will already submit the value. Check if this object "receiveMessages zone" is coming other than null by debugging the code, since each key is entered in the JTextField and a method call is made.

    
01.12.2015 / 13:56