Erro -> java.lang.NullPointerExceptio na conexão com BD

4 respostas
Silvinho16

Galera sou novo aqui no forúm, e essa é meu primeiro post.
Então paciência! :wink:
Gente comecei a programar em JAVA com BD.
E tenho que fazer o cadastro de uma eleição.
Esse cadastro tem as seguintes funções:
"Cadastra, Atualiza e Remove" uma eleição.
E está dando esse erro filho da mãe. :?

Quando eu uso só as classes beans, executavel e a janela, fica com o eventos e a conexão do BD, funciona! :S'
Não sei mais o que eu faço. Espero que me ajudem.

E[color=red]xception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at bd.acesso.acessando(acesso.java:43)
	at gui.Janela.actionPerformed(Janela.java:118)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)[/color]

Meu programa está a seguir:
Classe Janela.java do pacote gui

package gui;
import bean.beans;
import bd.acesso;

// E todos os outros importas necessários
public class Janela extends JFrame implements ActionListener{
	private JLabel a1, c1, d1;
	private JTextField a2, c2, d2;
	private JButton a3, c3, r3, l3;
	
	Statement stmt;
	Connection con;
	
	
	public Janela(){
	setSize (500,300);
	setTitle ("Cadastro de Eleição");
	setLocation (250,200);
	setResizable(false);
	
	// Criação do JLabel "ANO"
	a1 = new JLabel ("Ano: ");
	a1.setForeground(Color.RED);
	a1.setFont(new Font("Rockwell", Font.CENTER_BASELINE, 20));
	
    // Criação do JLabel "Cargo"
	c1 = new JLabel ("Cargo: ");
	c1.setForeground(Color.RED);
	c1.setFont(new Font("Rockwell", Font.CENTER_BASELINE, 20));
	
	// Criação do JLabel "Descrição"
	d1 = new JLabel ("Descrição: ");
	d1.setForeground(Color.RED);
	d1.setFont(new Font("Rockwell", Font.CENTER_BASELINE, 20));
	
	// Criação do JTextField do Ano
	a2 = new JTextField (5);
	a2.setBackground(Color.black);
	a2.setForeground(Color.RED);
	a2.setFont(new Font("Rockwell", Font.BOLD, 15));
	
	// Criação do JTextField do Cargo
	c2 = new JTextField (30);
	c2.setBackground(Color.black);
	c2.setForeground(Color.RED);
	c2.setFont(new Font("Rockwell", Font.BOLD, 15));
	
	// Criação do JTexField da Descrição
	d2 = new JTextField (40);
	d2.setBackground(Color.black);
	d2.setForeground(Color.RED);
	d2.setFont(new Font("Rockwell", Font.BOLD, 15));
	
	// Criação do botão "Cadastrar"
	c3 = new JButton ("Cadastrar");
	c3.setBackground(Color.BLACK);
	c3.setFont(new Font("Rockwell", Font.BOLD, 15));
	c3.setForeground(Color.RED);
	c3.addActionListener(this);
	
	// Criação do botão "Remover"
	r3 = new JButton ("Remover");
	r3.setBackground(Color.BLACK);
	r3.setFont(new Font("Rockwell", Font.BOLD, 15));
	r3.setForeground(Color.RED);
	r3.addActionListener(this);
	
	// Criação do botão "Limpar"
	l3 = new JButton ("Limpar");
	l3.addActionListener(this);
	l3.setBackground(Color.BLACK);
	l3.setFont(new Font("Rockwell", Font.BOLD, 15));
	l3.setForeground(Color.RED);
	
	// Criação do botão "Fechar"
	a3 = new JButton ("Atualizar");
	a3.setForeground(Color.red);
	a3.setBackground(Color.BLACK);
	a3.setFont(new Font("Rockwell", Font.BOLD, 15));
	a3.addActionListener(this);
	
	// Cria o Layout e Adiciona os botões
	setLayout(new GridLayout(5,2));
	getContentPane().setBackground(Color.BLACK);
	add(a1);
	add(a2);
	add(c1);
	add(c2);
	add(d1);
	add(d2);
	add(c3);
	add(r3);
	add(a3);
	add(l3);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}

	
	public void actionPerformed(ActionEvent e) {
		acesso bee = new acesso();
		bee.acessando(e);
	}
}
Classe beans do package bean
package bean;

import javax.swing.JButton;
import javax.swing.JTextField;

public class beans {
	private String ano, cargo, desc;
	private JTextField a2, c2, d2;
	private JButton a3,c3,l3,r3;
	
	

	public void setAno(String ano) {
		this.ano = ano;
	}

	public String getAno() {
		return ano;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public String getCargo() {
		return cargo;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	public String getDesc() {
		return desc;
	}

	public void setA2(JTextField a2) {
		this.a2 = a2;
	}

	public JTextField getA2() {
		return a2;
	}

	public void setC2(JTextField c2) {
		this.c2 = c2;
	}

	public JTextField getC2() {
		return c2;
	}

	public void setD2(JTextField d2) {
		this.d2 = d2;
	}

	public JTextField getD2() {
		return d2;
	}

	public void setA3(JButton a3) {
		this.a3 = a3;
	}

	public JButton getA3() {
		return a3;
	}

	public void setC3(JButton c3) {
		this.c3 = c3;
	}

	public JButton getC3() {
		return c3;
	}

	public void setL3(JButton l3) {
		this.l3 = l3;
	}

	public JButton getL3() {
		return l3;
	}

	public void setR3(JButton r3) {
		this.r3 = r3;
	}

	public JButton getR3() {
		return r3;
	}

}

A Classe Executavel do package exe

package exe;
import gui.Janela;

public class Executavel {
	public static void main (String[] args){
		Janela j = new Janela();
		j.setVisible(true);
	}

}

[size=18]E a classe que tá dando problema: Classe acesso do package BD![/size]

package bd;

import bean.beans;

import java.awt.event.ActionEvent;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;

public class acesso {
	Connection con;
	Statement stmt;
	
	public void acessando(ActionEvent e) {
	beans ee = new beans();
		try {
		   Class.forName("com.mysql.jdbc.Driver");
		   con = DriverManager.getConnection("jdbc:mysql://localhost/eleicao","root","123");
		   stmt = con.createStatement();
		   JOptionPane.showMessageDialog(null, "Conexão Feita com Sucesso","Conectou",JOptionPane.INFORMATION_MESSAGE);
		  
		   if (e.getSource()==ee.getC3()){
			   eventoCadastrar();
		   }
		   
		   else if (e.getSource()==ee.getR3()){
			   eventoRemover();
		   }
		   
		   else if (e.getSource()==ee.getA3()) {
		       eventoAtualizar();
		   }
		   else {
			   ee.getA2().setText("");
			   ee.getD2().setText("");
			   ee.getC2().setText("");
		   }
		   
		   
	   
	       con.close();
 
	    } catch (ClassNotFoundException e1) {
		JOptionPane.showMessageDialog(null, e1.getMessage(),"Erro",JOptionPane.ERROR_MESSAGE);
    	} catch (SQLException e1) {
		JOptionPane.showMessageDialog(null, e1.getMessage(),"Erro",JOptionPane.ERROR_MESSAGE);
        } catch (NumberFormatException e1){
		JOptionPane.showMessageDialog(null, "Caractere invalido","Erro",JOptionPane.ERROR_MESSAGE);
        }
	}
	
	   
    
	// Evento que realiza a Atualização
		private void eventoAtualizar() throws SQLException {
			beans ee = new beans();
			ee.setAno(ee.getA2().getText());
			ee.setCargo(ee.getC2().getText());
			ee.setDesc(ee.getD2().getText());
			int intAno;
			String nomeAux = "";
			
			if(ee.getAno().equals("")|| ee.getCargo().equals("")){
				String mensagem = "Preencha todos os dados";
				JOptionPane.showMessageDialog(null, mensagem,"Erro",JOptionPane.ERROR_MESSAGE);
			}
			else{	
				ResultSet rs = stmt.executeQuery("SELECT ano FROM cadastro where ano= '"+ee.getAno()+"'");
				if(rs.next()){
					nomeAux = rs.getString("ano");
				}
				if(nomeAux == ""){
					JOptionPane.showMessageDialog(null, "Não houve eleição nesse ano", "ERRO!!", JOptionPane.ERROR_MESSAGE);
				}
				else{
					intAno = Integer.parseInt(ee.getAno());
					stmt.executeUpdate("UPDATE cadastro SET cargo = '"+ee.getCargo()+"', descricao = '"+ee.getDesc()+"' where ano = '"+intAno+"'");
					JOptionPane.showMessageDialog(null,"Dados Atualizados com Sucesso","Sucesso",JOptionPane.INFORMATION_MESSAGE);
					ee.getA2().setText(null);
		    		ee.getC2().setText(null);
		    		ee.getD2().setText(null);
				}
				
			}
			
		}
		
		
		// Evento que faz a remoção
		private void eventoRemover() throws SQLException {
			beans ee = new beans();
			ee.setAno(ee.getA2().getText());
			ee.setCargo(ee.getC2().getText());
			ee.setDesc(ee.getD2().getText());
			int intAno; String nomeAux = "";
			
			if(ee.getAno().equals("")|| ee.getCargo().equals("")){
				String mensagem = "Preencha todos os dados";
				JOptionPane.showMessageDialog(null, mensagem,"Erro",JOptionPane.ERROR_MESSAGE);
			}
			else{	
				ResultSet rs = stmt.executeQuery("SELECT ano FROM cadastro where ano= '"+ee.getAno()+"'");
				if(rs.next()){
					nomeAux = rs.getString("ano");
				}
				if(nomeAux == ""){
					JOptionPane.showMessageDialog(null, "Essa eleição não Existe", "ERRO!!", JOptionPane.ERROR_MESSAGE);
				}
				else{
					intAno = Integer.parseInt(ee.getAno());
					stmt.executeUpdate("DELETE from cadastro where ano = '"+intAno+"'");
					JOptionPane.showMessageDialog(null,"Dados Removido com Sucesso","Sucesso",JOptionPane.INFORMATION_MESSAGE);
					ee.getA2().setText(null);
		    		ee.getC2().setText(null);
		    		ee.getD2().setText(null);
				}
				
			}
			
		}

		// Evento que faz o cadastramento
	    public void eventoCadastrar() throws SQLException{
	    	beans ee = new beans();
	    	ee.setAno(ee.getA2().getText());
	    	ee.setDesc(ee.getD2().getText());
	    	ee.setCargo(ee.getC2().getText());
	    	if(ee.getAno().equals("")|| ee.getDesc().equals("")|| ee.getCargo().equals("")){
	    		String mensagem = "Preencha todos os dados";
	    		JOptionPane.showMessageDialog(null, mensagem,"Erro",JOptionPane.ERROR_MESSAGE);
	    	}
		
	    	else{	
	    		int anoInt = Integer.parseInt(ee.getAno());
	    		stmt.executeUpdate("INSERT into cadastro(ano, cargo, descricao)values('"+anoInt+"' , '"+ee.getCargo()+"' , '"+ee.getDesc()+"')");
	    		JOptionPane.showMessageDialog(null,"Cadastro Concluído","Cadastro Concluido",JOptionPane.INFORMATION_MESSAGE);
	    		ee.getA2().setText(null);
	    		ee.getC2().setText(null);
	    		ee.getD2().setText(null);
	    	}
	    }
}

4 Respostas

ViniGodoy

Olá,

Por favor, não poste 30 quilos de código no tópico.

Sua exceção diz que o problema está:
at bd.acesso.acessando(acesso.java:43)

Na linha 43, do método acessando, na classe acesso.

Coloque o depurador no início desse método, rode passo-a-passo e veja porque isso ocorre.

drcelo

Olá provavelmente está dando o problema porque na linha 43 está dando um null.close pois o objeto com está null, debugue para ver porque o objeto de conexao não está sendo criado corretamente.

E

Silvinho, bom dia
Então, na verdade o código foi alterado em algum momento após você ter pego o erro? Porque pelo código postado não tem nada na linha 43 da classe acesso.java…

Uma situação que você pode colocar também é um pouco de validação antes de dar o .close()… como por exemplo ver se o objeto é direfente de null ou até chamar a função .isClosed() para saber se a conexão já está fechada ou não… talvez colocando estas validações o erro não aconteça…

Att.
Estevan Costa

barney

classe acesso

linha 21… ao invés disso…

con = DriverManager.getConnection("jdbc:mysql://localhost/eleicao","root","123");

acho que está faltando o [color=red]Número da porta[/color]…

con = DriverManager.getConnection("jdbc:mysql//localhost:NÚMERO DA PORTA/eleicao","root","123");

geralmente é 3306.

con = DriverManager.getConnection("jdbc:mysql//localhost:3306/eleicao","root","123");

espero ter ajudado

Criado 28 de dezembro de 2010
Ultima resposta 28 de dez. de 2010
Respostas 4
Participantes 5