Erro na inserção de dados

17 respostas
rrp1989

Toda vez que eu executo o código abaixo aparece o seguinte erro...

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at inserirCadastro_prof.actionPerformed(inserirCadastro_prof.java:17)
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)

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.sql.*;

public class inserirCadastro_prof implements ActionListener{
	public interface_3_prof campos;
	public Connection conecta;
	
	public inserirCadastro_prof(Connection d, interface_3_prof a){
		campos=a;
		conecta=d;
	}
	public void actionPerformed(ActionEvent e){
		try{
			Statement executaSQL=conecta.createStatement();
			if(!campos.nome_prof.getText().equals("")){
				
				String query="INSERT INTO professor(nm_prof,tel_prof,end_prof) VALUES( '"+campos.nome_prof.getText()+
				"','"+campos.tel_prof.getText()+
				"','"+campos.end_prof.getText()+
				"')";
				
				int result = executaSQL.executeUpdate(query);
				
				if (result==1){
					System.out.println("Inserido \n");
					campos.nome_prof.setText("");
					campos.tel_prof.setText("");
					campos.end_prof.setText("");
				
					
				}
				else{
					System.out.println("Erro \n");
					campos.nome_prof.setText("");
					campos.tel_prof.setText("");
					campos.end_prof.setText("");
				}
			}
			else
				JOptionPane.showMessageDialog(null, "PREENCHA OS CAMPOS","Atenção",JOptionPane.ERROR_MESSAGE);
			executaSQL.close();
		}
		catch(SQLException sqlex){
			sqlex.printStackTrace();
			System.out.println(sqlex.toString());
		}
	}
}
o código é este

17 Respostas

B

Exception in thread “AWT-EventQueue-0” java.lang.[color=red]NullPointerException[/color]
at inserirCadastro_prof.actionPerformed(inserirCadastro_prof.java:[color=red]17[/color])

if(!campos.nome_prof.getText().equals("")){

Ou campo é nulo, ou nome_prof é nulo, o getText() é nulo.

rrp1989

ummmmmm

nao entendi parceiro...

essa e a classe de onde vem os campos

/**Versão 1.0
 * 
 */
import java.awt.*;
import javax.swing.*;
import java.sql.*;
/**
 * @author Rodrigo Ribeiro Pereira
 *Interface de cadastro de professor
 */
public class interface_3_prof extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel lnome_prof,lend_prof,ltel_prof;
	public JTextField nome_prof,tel_prof,end_prof;
	private JButton salvar,cancelar;
	public Connection d;
	public interface_3_prof a;
	
	
	public interface_3_prof(){
		setTitle("Cadastro de professor");
		Container c=getContentPane();
		c.setLayout(null);
		
		lnome_prof=new JLabel("Nome : ");
		lnome_prof.setBounds(15,10,70,20);
		c.add(lnome_prof);
		nome_prof= new JTextField(50);
		nome_prof.setBounds(95, 10, 280, 20);
		c.add(nome_prof);
		
		ltel_prof=new JLabel("Telefone : ");
		ltel_prof.setBounds(15,40,70,20);
		c.add(ltel_prof);
		tel_prof= new JTextField(10);
		tel_prof.setBounds(95, 40, 170, 20);
		c.add(tel_prof);
		
		lend_prof=new JLabel("Endereço : ");
		lend_prof.setBounds(15,70,70,20);
		c.add(lend_prof);
		end_prof= new JTextField(10);
		end_prof.setBounds(95, 70, 250, 20);
		c.add(end_prof);
		
		salvar= new JButton("Salvar");
		salvar.setBounds(15,310,100,20);
		salvar.addActionListener(new inserirCadastro_prof(d,a));
		c.add(salvar);
		
		cancelar= new JButton("Cancelar");
		cancelar.setBounds(125,310,100,20);
		c.add(cancelar);
		
		
		
		setLocation(100,100);
		setSize(800,450);
}}
B
salvar.addActionListener(new inserirCadastro_prof(d,a));

Não vejo ‘a’ nem ‘d’ sendo inicializado em lugar algum.

rrp1989

ummmmm

nao sei se ta certo mas eu ja tinha tentado assim:

public interface_3_prof(){
		
		d=new Connection();
		a=new interface_3_prof();
		
		
		setTitle("Cadastro de Professores");
		Container c = getContentPane();
		c.setLayout(null);

So que o Connection fik sublinhado com a seguinte msg

Cannot instantiate the type Connection

Ele não pode ser instanciado

Qual o erro?

B

Conexões tem que ser obtidas através do driver do banco.

Dê um procurada em códigos com DriverManager e getConnection()

rrp1989

e foi

atraves do j/conector do mysql

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

public class Biblioteca extends JFrame{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 
	 */
	
	
	
	
	public Connection conecta;
	
	public Biblioteca() {
		
		
		//============Banco de dados=======;
		try{
			String driverName = "org.gjt.mm.mysql.Driver"; // MySQL MM JDBC driver
			Class.forName(driverName);

			String serverName = "localhost";
			String mydatabase = "biblioteca";
			String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
			String username = "root";
			String password = "root";
			conecta = DriverManager.getConnection(url, username, password);
			
			System.out.println("Conexão efetuada\n");
			
		}
		catch(ClassNotFoundException e)
		{
			System.out.println("Conexão não efetuada, classe");
			
			}
		catch(SQLException d)
			{
				System.out.println("erro na conexão");
			}
	
	addWindowListener(
			new WindowAdapter(){
				public void windowClosing(WindowEvent e){
					System.exit(0);
				}
			});
			}
	public static void main(String args[]){
		new interface_2().setVisible(true);
	}
	
}

ja me disseram umas 3 vezes que o erro ta na linha 17 do inserirCadastro_prof pq um dos campos está nulo

mas como eu faço pra resolver isso?

B

Pela lógica, você quer passar o próprio objeto com que está trabalhando do parâmetro, certo?

Use a palavra this nesse caso.

rrp1989

Se eu entendi certo voce quis dizer assim???

salvar.addActionListener(new inserirCadastro_prof(d,this));

Se não for desculpe a minha ignorância
:lol:

Mas se for continua dando NullPointer

B

Você inicializou novo_prof?

Você preencheu o texto de novo_prof?

Dica: Null Pointer Exceptions SEMPRE são erros de falta de inicialização de objetos.

rrp1989
Bruno Laturner:
rrp1989:
Mas se for continua dando NullPointer

Você inicializou novo_prof?

Você preencheu o texto de novo_prof?

Dica: Null Pointer Exceptions SEMPRE são erros de falta de inicialização de objetos.

[/quote]

Ummmmmmm

Não sabia disso

Mas não consigo achar de jeito nenhum qual objeto falta inicializar

agradeço a ajuda ae

to mandando os outros códigos do projeto

às vezes só vc que nao enxerga

rsrsrsrsrsrsr

import java.awt.event.*;

public class iniciaTela_prof implements ActionListener{
	public void actionPerformed(ActionEvent e ){
		new interface_3_prof().setVisible(true);
	}
}
import java.awt.*;
import javax.swing.*;
public class interface_2 extends JFrame{
	/**Autor: Rodrigo Ribeiro
	 * Interface inicial para o usuário
	 */
	private static final long serialVersionUID = 1L;
	JButton inserir_Cad,altera_Cad,exclui_Cad,inserir_Pub,altera_Pub,exclui_Pub,gerar_Rel,loc_Pub;

	
	public interface_2(){
	
		setTitle("Escolha ação a ser realizada");
		Container c=getContentPane();
		c.setLayout(null);

		
		inserir_Cad= new JButton("Inserir Cadastro Professor");
		inserir_Cad.setBounds(15,10,300,30);/**(coluna,linha,largura,altura)*/
		inserir_Cad.addActionListener(new iniciaTela_prof());
		c.add(inserir_Cad);
		
		altera_Cad= new JButton("Alterar Cadastro");
		altera_Cad.setBounds(15,50,200,30);
		//altera_Cad.addActionListener(new alteraCadastro());
		c.add(altera_Cad);
		
		exclui_Cad= new JButton("Excluir Cadastro");
		exclui_Cad.setBounds(15,90,200,30);
		//exclui_Cad.addActionListener(new excluiCadastro());
		c.add(exclui_Cad);
		
		inserir_Pub= new JButton("Inserir Publicação");
		inserir_Pub.setBounds(15,130,200,30);
		//inserir_Pub.addActionListener(new inserirPublicacao());
		c.add(inserir_Pub);
		
		altera_Pub= new JButton("Alterar Publicação");
		altera_Pub.setBounds(15,170,200,30);
		//altera_Pub.addActionListener(new alteraPublicacao());
		c.add(altera_Pub);
		
		exclui_Pub= new JButton("Excluir Publicação");
		exclui_Pub.setBounds(15,210,200,30);
		//exclui_Pub.addActionListener(new excluiPublicacao());
		c.add(exclui_Pub);
		
		loc_Pub= new JButton("Locar Publicação");
		loc_Pub.setBounds(15,250,200,30);
		//loc_Pub.addActionListener(new locaPublicacao());
		c.add(loc_Pub);
		
		gerar_Rel= new JButton("Gerar Relatórios");
		gerar_Rel.setBounds(15,290,200,30);
		//gerar_Rel.addActionListener(new gerarRelatorio());
		c.add(gerar_Rel);
	
		
		setLocation(100,100);/**Posição na tela*/
		setSize(500,450);/**Tamanho da tela*/
		
		
	}
	
	}
B

Ok, vamos por passos, favor responder cada questão:

Onde você inicia ‘Connection d’?

Onde você inicia ‘interface_3_prof a’?

Onde você inicia ‘nome_prof’?

O que nome_prof.getText() deve retornar?

rrp1989

O “interface_3_prof a” eu tirei e coloquei o this OK

campos.nome_prof.getText()” era pra pegar o JTextField de interface_3_prof nome_prof OK

O “Connection d” eu tentei iniciar daquela forma que eu demonstrei, mas nao roda, da a seguinte mensagem:

Cannot instantiate the type Connection

Pode ser que eu esteja fazendo errado(na verdade bem provável rsrsrsrsrs)

E por fim “nome_prof” é um campo de texto iniciado em new JTextField=(“Nome :”)

Bom pelo menos é issso que eu estou tentando fazer…

Desde antiontem :shock:

rrp1989

to mandando a pasta do projeto pra facilitar a visualização do projeto

vlw pra quem ta ajudando aeeeeee

http://rapidshare.com/files/122018102/interface_projeto.rar.html

B

O “interface_3_prof a” eu tirei e coloquei o this OK
Certo

campos.nome_prof.getText()” era pra pegar o JTextField de interface_3_prof nome_prof OK
nome_prof é o JTextField. getText() pega o texto dentro desse JTextField. A questão é: existe algum texto lá?

[b]O “Connection d” eu tentei iniciar daquela forma que eu demonstrei, mas nao roda, da a seguinte mensagem:

Cannot instantiate the type Connection

Pode ser que eu esteja fazendo errado(na verdade bem provável rsrsrsrsrs)[/b]

Você nos mostrou outra classe onde a conexão é inicializada, mas não vemos como esta classe aqui está pegando a conexão da outra classe. As duas classes não estão se comunicando, uma não chama métodos uma da outra.

E por fim “nome_prof” é um campo de texto iniciado em new JTextField=(“Nome :”)
Não, você inicalizou lnome_prof com JLabel(“Nome :”), nome_prof está com JTextField(50). A questão é, essa inicialização preenche o texto dentro dele para ser obtido pelo getText()

PS: Não tem um modo mais simples p/ começar a estudar Java? Uma aplicação desktop assim de quebra é bem complicado. Talvez você queira começar explicando o que quer fazer exatamente.

rrp1989

Ummmm nao tive opção tive de aprender correndo mesmo

to estudando direto faz 2 semanas Java

tenho que fazer um sistema para uma biblioteca

em que cadastro de professores e alunos é separado

toda publicação fique ligada a um professor

o aluno so possa fikar com 2 publicações

desenvolvi a interface e a primeira implementação é a do cadastro de professor

[b]
Quando você pergunta existe algum texto em campos.nome_prof.getText() eu imaginei que fosse retornar o JTextField e o texto digitado nele

E eu estou com um pouco de complicações para retornar essa conexão mesmo

Como eu poderia fazer para chamar essa conexão de outro método[/b]

como pode ver ja gastei muitas horas de estudo, mas provavelmente vou gastar muito mais…

:smiley:

Vlw pela atenção

Caso fique dúvida eu mandei um link com a pasta do projeto caso queira dar uma olhada

rrp1989

ajudaaaaaaa

por favor

B

A ajuda que posso te dar é falar p/ rever os conceitos de Java, instanciação de objetos, como atributos e métodos devem ser usados, como um objeto chama outro, como passar os parâmetros nos métodos.

Se for trabalhar com a organização que você está agora, você vai se enrascar cada vez mais.

Dica: Desenhe num papel de padaria ou num guardanapo(ou qqr coisa melhor) como o teu sistema trabalhará, principalmente nas relações entre cada classe.

Criado 12 de junho de 2008
Ultima resposta 13 de jun. de 2008
Respostas 17
Participantes 2