Erro ao salvar no BD - Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

Olá pessoal!

Estou estudando Java e criei um projetinho com formulário para inserção, alteração e exclusão junto ao banco de dados. Criei o banco, as camadas DAO, MODEL e VIEW. Porém, quando executo o programa e vou testar uma inserção, ele volta a seguinte exceção:

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at model.dao.UsuarioDAO.save(UsuarioDAO.java:36)
at view.CadastroPessoa.btnEnviarActionPerformed(CadastroPessoa.java:128)
at view.CadastroPessoa.access$000(CadastroPessoa.java:18)
at view.CadastroPessoa$1.actionPerformed(CadastroPessoa.java:55)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6539)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6304)
at java.awt.Container.processEvent(Container.java:2239)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2297)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.awt.Container.dispatchEventImpl(Container.java:2283)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
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:74)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
at java.awt.EventQueue$4.run(EventQueue.java:733)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
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)

Percebi que o erro pode estar na linha 36 da minha classe UsuarioDAO, quando eu tento buscar a chave estrangeira de Pessoa, porém não consigo identificar o que está de errado.

Segue o código da classe:

public class UsuarioDAO {

private Connection con = null;

public UsuarioDAO() {
    con = ConnectionFactory.getConnection();
    PreparedStatement stmt = null;
}

public boolean save(Usuario usuario) {
    String sql = "INSERT INTO Usuario (login, senha, Pessoa_idPessoa) VALUES (?,?,?)";
    PreparedStatement stmt = null;

    try {
        stmt = con.prepareStatement(sql);
        stmt.setString(1, usuario.getUsuario());
        stmt.setString(2, usuario.getSenha());
        stmt.setInt(3, usuario.getPessoa().getIdPessoa());
        stmt.executeUpdate();
        return true;
    } catch (SQLException ex) {
        System.err.println("Erro: " + ex);
        return false;
    }finally{
        ConnectionFactory.closeConnection(con);
    }

}

}

O código ao clicar para cadastrar:

private void btnEnviarActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:       
    Usuario u = new Usuario();
    Pessoa p = new Pessoa();
    PessoaDAO pessoa = new PessoaDAO();
    UsuarioDAO usuario = new UsuarioDAO();
    p.setNome(txtNome.getText());
    p.setCpf(txtCPF.getText());
   u.setUsuario(txtUsuario.getText());
   u.setSenha(txtSenha.getText());        
   if(usuario.save(u) && pessoa.save(p)){
       JOptionPane.showMessageDialog(null,"Salvo com sucesso!");
   }else{
       JOptionPane.showMessageDialog(null,"Não salvou!");
   }        
   
}

Alguém poderia dar uma ajuda nisso, por favor?

No método save da classe UsuarioDAO, na linha 36, você está tentando acessar um membro de um objeto que não foi inicializado.

Certo.

No meu evento, eu adicionei uma linha de código:
Pessoa p = new Pessoa();
u.setPessoa§;

assim não deu mais aquela exceção, mas assim que executo o programa, ele lança outra exceção:

Erro: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (bdpessoa.usuario, CONSTRAINT fk_Usuario_Pessoa1 FOREIGN KEY (Pessoa_idPessoa) REFERENCES pessoa (idPessoa))

Poderia dar uma luz pra mim?

Não sei como estão os relacionamentos na sua base da dados, mas o erro é por causa de uma violação de integridade.
Provavelmente você já tem um usuário com aquela pessoa