Java.lang.NullPointerException

10 respostas
V

Olá,

Estou fazendo um programa que utiliza uma classe de conexão no banco de dados que retorna o valor para classe onde eu faço a interface gráfica da tela.
Só que na hora de compilar acontece o erro abaixo:

java.lang.NullPointerException

at CarregaUnidade.(CarregaUnidade.java:22)

at Tela.(Tela.java:50)

at Tela.main(Tela.java:68)

Exception in thread main

10 Respostas

J

Olá,

Poste seu código junto aqui será mais facil identificar o seu erro… ahh por favor nao esqueça de por seu codigo entre “

Obrigado. Até mais!

V

Ok, lá vai o código:

---- classe da interface da tela

import javax.swing.*;
import java.awt.event.*;
import java.sql.SQLException;


public class Tela extends JFrame{

	JTextField unidade   = new JTextField(22);
	JComboBox  ano	     = new JComboBox();
	JButton    bInserir  = new JButton("Inserir");
	int codigo = 1;
	
	public Tela() throws SQLException
	{
		super("Minha tela");
		setSize(400,200);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		
		
		JPanel painel 		= new JPanel();
		JLabel unidadeLabel = new JLabel("Unidade: ");
		JLabel anoLabel		= new JLabel("Ano: ");
		
		ano.addItem("1999");
		ano.addItem("2000");
		ano.addItem("2001");
		ano.addItem("2002");
		
		painel.add(unidadeLabel);
		painel.add(unidade);
		painel.add(anoLabel);
		painel.add(ano);
		painel.add(bInserir);
		
		
		CarregaUnidade carrega = new CarregaUnidade(codigo);  
		
		unidade.setText(CarregaUnidade.setUnidade());
	
		
		setContentPane(painel);
		
		
		show();		
	}
	
	public void windowClosing(WindowEvent e)
	{
		System.exit(0);
	}
	
	public static void main(String[] args) throws SQLException
	{
		Tela formulario = new Tela();
	}
	
}

--- classe onde eu monto a query

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;


public class CarregaUnidade extends Connection_Oracle{
	
	Statement stmt = con.createStatement();
	String query;
	static int codUnidade;
	public static String nomeUnidade;
			
	public CarregaUnidade(int codUnidade) throws SQLException
	{
				
		if ( conectado == true )
		{			
			query = "SELECT coluna1 " +
						"FROM cliente " +
							"WHERE numentidade = " + codUnidade ;
							
			ResultSet rset = stmt.executeQuery(query);
			
			while ( rset.next() ){				
				
				nomeUnidade = rset.getString("coluna1");
				setUnidade();			
			}
			
			if ( rset != null ){
				rset.close();
			}
			
			if ( stmt != null ){
				stmt.close();
			}						
		}
		
	}
	
	public static String setUnidade ()
	{
		System.out.println(nomeUnidade);
		return nomeUnidade;
	}
	
	public static void main (String[] args) throws SQLException
	{
		openDBServ();
		
		CarregaUnidade carrega = new CarregaUnidade(codUnidade);
	}

}

-- classe de conexão do banco

import javax.swing.JOptionPane;
import java.sql.*;


public class Connection_Oracle {
		
	public static Connection con;
	public static boolean conectado = false; 

	public static boolean openDBServ() throws SQLException 
	{		  
		  String databaseURL; 
		  
		 
		  DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
		  
		  databaseURL = "jdbc:oracle:thin:@200.0.0.0:1521:BANCO" ;
		 
		
		  System.out.println("\nUsando DBServ.java para se conectar ao banco..."); 
		  try { 
			 System.out.println("Procurando Driver JDBC..."); 
			 Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");  //BANCO MYSQL 
			 System.out.println(" OK"); 
		  } 
		  catch(java.lang.ClassNotFoundException e) { 
			 System.out.println(" Driver não encontrado\n"); 
			 System.err.print("ClassNotFoundException:"); 
			 System.err.println(e.getMessage()); 
			 JOptionPane.showMessageDialog(null,"Erro de sistema #001\nSe o problema persistir entre em contato com o desenvolvedor", 
									"Erro",JOptionPane.ERROR_MESSAGE); 
		  } 
		  try { 
			 con = DriverManager.getConnection (databaseURL, "scott", "tiger");
			 System.out.println("conectado..."); 
			 conectado = true;
			 
		  } 
		  catch (SQLException ex) { 
			 System.err.println("SQLException:" + ex.getMessage()); 
			 if (ex.getErrorCode() == 1017)
			 {
				JOptionPane.showMessageDialog(null,"Nome ou senha de usuário inválido.", 
													"Erro",JOptionPane.ERROR_MESSAGE);
			 }
			 else
			 {
				JOptionPane.showMessageDialog(null,"Erro de sistema "+ex.getMessage()+"\nSe o problema persistir entre em contato com o desenvolvedor", 
													"Erro",JOptionPane.ERROR_MESSAGE);
			 }			     
		  } 
		  return conectado; 
	   } 
	
	public static void main(String[] args) throws SQLException
	{
		openDBServ();
	}

	
	
	
}
P

eu não tenho o oracle aqui para testar mas vc pode falar em que linha ele está dando este erro ?

e onde

F

nao tenho certeza se eh isso… mas pelo q eu vi, vc tem q declarar todas as variaveis globais da classe Tela como static… e tb, na parte

Statement stmt = con.createStatement();

da classe CarregaUnidade, tenta por:

Statement stmt = Connection_Oracle.con.createStatement();

espero ter ajudado… vlw

P

estou enviando algumas alteraçoes que fiz no seu código …
não funcionou ainda mas acho que pode te dar uma ajuda…

erros:

  • sempre o conectado retorna true
    coloquei para vc ver onde está o erro pois quando ele tenta fazer conexão ele não consegue…
P
faltou o código !
import javax.swing.JOptionPane; 
import java.sql.*; 

public class Connection_Oracle { 
       
   public static Connection con; 
   public static boolean conectado = false; 

   public static boolean openDBServ() throws SQLException 
   {        
		String databaseURL; 
	//	DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); 
		databaseURL = 	"endereco";  // alterei para inserir no meu banco
	   System.out.println("\nUsando DBServ.java para se conectar ao banco..."); 
		try { 
		  System.out.println("Procurando Driver JDBC..."); 
		  Class.forName ("Driver"); 
		  System.out.println(" OK"); 
		} 
		catch(java.lang.ClassNotFoundException e) { 
		  System.out.println(" Driver não encontrado\n"); 
		  System.err.print("ClassNotFoundException:"); 
		  System.err.println(e.getMessage()); 
		  JOptionPane.showMessageDialog(null,"Erro de sistema #001\nSe o problema persistir entre em contato com o desenvolvedor", 
		   "Erro",JOptionPane.ERROR_MESSAGE); 
		} 
		try { 
		  con = DriverManager.getConnection (databaseURL, "scott", "tiger"); 
		  System.out.println("conectado..."); 
		  conectado = true;  
		} 
		catch (SQLException ex) { 
		  System.err.println("SQLException:" + ex.getMessage()); 
		  if (ex.getErrorCode() == 1017) 
		  { 
			JOptionPane.showMessageDialog(null,"Nome ou senha de usuário inválido.", 
									   "Erro",JOptionPane.ERROR_MESSAGE); 
		  } 
		  else 
		  { 
			JOptionPane.showMessageDialog(null,"Erro de sistema "+ex.getMessage()+"\nSe o problema persistir entre em contato com o desenvolvedor", 
									   "Erro",JOptionPane.ERROR_MESSAGE); 
		  }
		  conectado = false;  // inserir               
		} 
		return conectado; 
	  } 
    
   public static void main(String[] args) throws SQLException 
   { 
	  openDBServ(); 
   } 
} 

// ----------------------------------
/*
 * Criado em 03/02/2004
 *
 * Para alterar o gabarito para este arquivo gerado vá para
 * Janela>Preferências>Java>Geração de Códigos>Código e Comentários
 */
package ajuda;

/**
 * @author marco
 *
 * Para alterar o gabarito para este comentário do tipo gerado vá para
 * Janela>Preferências>Java>Geração de Códigos>Código e Comentários
 */
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 

public class CarregaUnidade extends Connection_Oracle{ 
   Statement stmt; 
   String query; 
   static int codUnidade; 
   public static String nomeUnidade; 
          
   public CarregaUnidade(int codUnidade) throws SQLException 
   { 
   	
//	Connection_Oracle aa = new Connection_Oracle();
    System.out.println(conectado);
   	try {
		stmt = con.createStatement();
   	} catch (Exception e){System.out.print("Não teve como !! ");};
	System.out.println(conectado);
             
	  if ( conectado == true ) 
	  {          
		 query = "SELECT coluna1 " + 
				  "FROM cliente " + 
					 "WHERE numentidade = " + codUnidade ; 
                      
		 ResultSet rset = stmt.executeQuery(query); 
          
		 while ( rset.next() ){             
             
			nomeUnidade = rset.getString("coluna1"); 
			setUnidade();          
		 } 
          
		 if ( rset != null ){ 
			rset.close(); 
		 } 
          
		 if ( stmt != null ){ 
			stmt.close(); 
		 }                   
	  } 
       
   } 
    
   public static String setUnidade () 
   { 
	  System.out.println(nomeUnidade); 
	  return nomeUnidade; 
   } 
    
   public static void main (String[] args) throws SQLException 
   { 
	  openDBServ(); 
       
	  CarregaUnidade carrega = new CarregaUnidade(codUnidade); 
   } 

}

//-- Continua o mesmo o TEla

P

eu alterei um outra classe e crie a minha a partir do que tinha aqui dá uma olhada e ve se te ajuda !!

criei duas classes uma Conexao que só faz conexao e outra a sua CarregaUnidade2 e a sua TEla …

Obs: tirei as strings de conexao …

import java.sql.*;

public class Conexao {
	private static Conexao me = null;
	private Connection conexao = null;

	private Conexao(){
		try{
			init(); 
		}catch (SQLException ex){ex.printStackTrace();}
	}
	
	public static synchronized Conexao instance(){
		if(me == null){
			me = new Conexao();
		}
		return me;
	}
	
	private void init() throws SQLException{
		try {
		Class.forName("odbc");
		}catch (ClassNotFoundException J){ J.printStackTrace();}
		conexao = DriverManager.getConnection("string de conexao");
	}
	
	public void fechaConexao(){
		try {
			conexao.close();
		}catch (Exception ex){ex.printStackTrace();}
	}

	public Connection getConnection() {
	   return conexao;
	 }
}



import java.sql.*;
public class CarregaUnidade2 {
	private Statement stmconsulta;
	private ResultSet Resultado;
	private Connection cnxConexao = Conexao.instance().getConnection();
	private String query; 
       
   public CarregaUnidade2() throws SQLException{ 
		stmconsulta = cnxConexao.createStatement();
	    query = "SELECT nome " + "FROM funcionario "; 
		ResultSet rset = stmconsulta.executeQuery(query); 
          
		 while ( rset.next() )             
			System.out.println( rset.getString("nome"));
          
		 if ( rset != null )
			rset.close(); 
          
		 if ( stmconsulta != null ) 
			stmconsulta.close(); 
	  } 
       
   public static void main (String[] args) throws SQLException{ 
	  CarregaUnidade2 carrega = new CarregaUnidade2(); 
   } 
}
import javax.swing.*; 
import java.awt.event.*; 
import java.sql.SQLException; 

public class Tela extends JFrame{ 

   JTextField unidade   = new JTextField(22); 
   JComboBox  ano        = new JComboBox(); 
   JButton    bInserir  = new JButton("Inserir"); 
   int codigo = 1; 
    
   public Tela() throws SQLException{ 
	  super("Minha tela"); 
	  setSize(400,200); 
	  setDefaultCloseOperation(EXIT_ON_CLOSE); 
             
	  JPanel painel       = new JPanel(); 
	  JLabel unidadeLabel = new JLabel("Unidade: "); 
	  JLabel anoLabel      = new JLabel("Ano: "); 
      
      ano.addItem("1999"); 
	  ano.addItem("2000"); 
	  ano.addItem("2001"); 
	  ano.addItem("2002"); 
       
	  painel.add(unidadeLabel); 
	  painel.add(unidade); 
	  painel.add(anoLabel); 
	  painel.add(ano); 
	  painel.add(bInserir); 
       
	  CarregaUnidade2 carrega = new CarregaUnidade2();  
	  //unidade.setText(CarregaUnidade2.setUnidade()); 
	  setContentPane(painel); 
	  show();       
   } 
    
   public void windowClosing(WindowEvent e){ 
	  System.exit(0); 
   } 
    
   public static void main(String[] args) throws SQLException{ 
	  Tela formulario = new Tela(); 
   } 
}

Eu não sei se consegui te ajudar ma qualquer coisa posta msg

M

beeei… nao sei se o pacheco conseguiu resolver o problema do post do vansol, mas… se puxou heim??? usuário ativo mesmo! hehehe parabéns, é isso q faz o forum cada vez mais produtivo! :skol

V

Agradeço pela atenção e pelo empenho em ajudar.

Já consegui resolver o problema.

Thank’s

:stuck_out_tongue:

J

Olá Vansol,

Tem como vc postar aqui como é que resolveu seu erro? e qual era o problema que tinha? poste seu código aqui… só pra constar para futuras pesquisas =)

Obrigado.

Criado 2 de fevereiro de 2004
Ultima resposta 5 de fev. de 2004
Respostas 10
Participantes 5