Client - Console error server

Asked

Viewed 46 times

2

I have a client and server working to send messages from a Chat application but an error on my console when I try to write a message. Can someone explain to me the mistake?

Error on console

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

    }

}

}

  • Add your Painelmensagens class to the question too, the error is being triggered from it.

  • @Diegofelipe already added

  • Where is line 73? estadoMensagem is NULL and you’re trying to make a .getEstado() in a null variable. Check the third line of your method escreverMensagem().

1 answer

1

This giving Nullpointerexception, you are using the keypressed event so the moment you click inside the inputText it will already submit the value. Make sure that this "zonaReceberMensagens" object is coming other than null by debugging the code, as each key entered in Jtextfield is called from the method.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.