Java.lang.NullPointerException

17 respostas
rocha

Pessoal estou com o seguinte problema:

Tenho um form chamado CadEmpresa:

que tem o seguinte código:
public class CadEmpresa extends javax.swing.JInternalFrame {
    
   
    public CadEmpresa() {
        initComponents();
        myinit();
    }
    
   
    private void initComponents() {
        ...
    }
    
    
    public Empresa pegarDados(){  
        
        Empresa empresa = new Empresa();
        empresa.setRzSocial(formEmpresa.getRzSocial());
        empresa.setApelido(formEmpresa.getApelido());
        empresa.setDtVencimento(formEmpresa.getDtVencimento());
                
        return empresa;
    }
    
    public void myinit() {
        EventosEmpresaButtons controleBotoes = new EventosEmpresaButtons(this); 
        this.stoolBar.setReceptorEventos(controleBotoes);
  }
}
Minha classe que controla as ações dos botões:
public class EventosEmpresaButtons implements StoolBarEvents{      
  private CadEmpresa parent;
  private NegocioEmpresa neg;

  
  public EventosEmpresaButtons(CadEmpresa parent) {
    this.parent = parent;
  }
  
  public void salvar() { 
    CadEmpresa form = new CadEmpresa();
    Empresa empresa = new Empresa();
    empresa = form.pegarDados();
    
    
    System.out.println("testeEventos");
    neg.Salvar(empresa);
       
  }
}
Miha classe de negocio:
public class NegocioEmpresa {
    private EmpresaDao dao = new EmpresaDao();
   
    public NegocioEmpresa() {
     
    }
    
    public void Salvar(Empresa empresa){ 
        System.out.println("TEste Negocio");
        try{
            dao.cadastrar(empresa);
        }catch (Exception e){
            System.out.println(e.fillInStackTrace());
            System.out.println(e.getMessage());
            System.out.println("Falha Negocio!!!");
        }
    }
    
}
Meu DAO:
public class EmpresaDao {
    private static Conexao cx = new Conexao();
    private static Connection conexao = cx.getConexao(); 
    /** Creates a new instance of EmpresaDao */
    public EmpresaDao() {
    }
    
    public Integer gerarId() throws Exception { 
        Id id = new Id(); 
        return id.gerarId("tbEmpresa", "idEmpresa");
    }
    
    public void cadastrar(Empresa em) throws Exception { 
        if( em == null ) return;
        Statement st = conexao.createStatement();
        PreparedStatement ps = null;
        try {
            String sql = "INSERT INTO tbEmpresa (idEmpresa, rzsocial, apelido, dtVencimento) VALUES (?,?,?,?)";
            ps = conexao.prepareStatement(sql);
            ps.setInt(1, em.getIdEmpresa().intValue());
            ps.setString(2, em.getRzSocial());
            ps.setString(3, em.getApelido());
            ps.setString(4, em.getDtVencimento());
            ps.execute();
        } finally {
            if(ps!=null) try {ps.close(); } catch( Exception e ) {}
            if(ps!=null) try {conexao.close(); } catch( Exception e ) {}
        }
    }}

quando rodo e clico em salvar me traz o seguinte erro:

testeEventos
java.lang.NullPointerException
at br.com.solutec.gestor.gui.controle.empresa.EventosEmpresaButtons.salvar(EventosEmpresaButtons.java:35)
at br.com.solutec.gestor.gui.components.StoolBar.btSalvarClick(StoolBar.java:126)
at br.com.solutec.gestor.gui.components.StoolBar.access$100(StoolBar.java:13)
at br.com.solutec.gestor.gui.components.StoolBar$2.actionPerformed(StoolBar.java:56)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.java:5100)
at java.awt.Component.processEvent(Component.java:4897)
at java.awt.Container.processEvent(Container.java:1569)
at java.awt.Component.dispatchEventImpl(Component.java:3615)
at java.awt.Container.dispatchEventImpl(Container.java:1627)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
at java.awt.Container.dispatchEventImpl(Container.java:1613)
at java.awt.Window.dispatchEventImpl(Window.java:1606)
at java.awt.Component.dispatchEvent(Component.java:3477)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
BUILD SUCCESSFUL (total time: 1 minute 58 seconds)

Aguém pode me ajudar

17 Respostas

mister_m

Posso ter me perdido no seu código, mas você parece não instanciar NegocioEmpresa em EventosEmpresaButtons.

rocha

Realmente não tinha mas fiz e o erro pulou para NegocioEmpresa

run-single:
testeEventos
TEste Negocio
java.lang.NullPointerException
null
Falha Negocio!!!

K

.

mister_m

Mude seu catch pra um simples:

e.printStackTrace();

e poste o resultado de novo.

rocha
Mas só tenho isso na classe:
public class NegocioEmpresa {
    private EmpresaDao dao = new EmpresaDao();
    /** Creates a new instance of NegocioEmpresa */
    public NegocioEmpresa() {
     
    }
    
    public void Salvar(Empresa empresa){ 
       
        try{
            dao.cadastrar(empresa);
        }catch (Exception e){
            System.out.println(e.fillInStackTrace());
            System.out.println(e.getMessage());
            System.out.println("Falha Negocio!!!");
        }
    }
    
}

Está td isntanciado não?

rocha

mister__m:
Mude seu catch pra um simples:

e.printStackTrace();

e poste o resultado de novo.

Tentei isso e me veio o seguinte erro:

D:\Sistemas\Gestor\projetos\negocioGestor\src\br\com\solutec\gestor\negocio\empresa\NegocioEmpresa.java:28: ‘void’ type not allowed here

mister_m

Note que você fez o que você entendeu, e não o que eu disse :slight_smile:

Deixe somente assim:

} catch (Exception e) {
    e.printStackTrace();
}

E poste o stack trace para que possamos ajudá-lo.

rocha

mister__m:
Mude seu catch pra um simples:

e.printStackTrace();

e poste o resultado de novo.

Taí o erro:

testeEventos

java.lang.NullPointerException

at br.com.solutec.gestor.dao.empresa.EmpresaDao.cadastrar(EmpresaDao.java:38)

at br.com.solutec.gestor.negocio.empresa.NegocioEmpresa.Salvar(NegocioEmpresa.java:26)

at br.com.solutec.gestor.gui.controle.empresa.EventosEmpresaButtons.salvar(EventosEmpresaButtons.java:35)

at br.com.solutec.gestor.gui.components.StoolBar.btSalvarClick(StoolBar.java:126)

at br.com.solutec.gestor.gui.components.StoolBar.access$100(StoolBar.java:13)

at br.com.solutec.gestor.gui.components.StoolBar$2.actionPerformed(StoolBar.java:56)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)

at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)

at java.awt.Component.processMouseEvent(Component.java:5100)

at java.awt.Component.processEvent(Component.java:4897)

at java.awt.Container.processEvent(Container.java:1569)

at java.awt.Component.dispatchEventImpl(Component.java:3615)

at java.awt.Container.dispatchEventImpl(Container.java:1627)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)

Falha Negocio!!!

at java.awt.Container.dispatchEventImpl(Container.java:1613)

at java.awt.Window.dispatchEventImpl(Window.java:1606)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
mister_m

Aparentemente, em.getIdEmpresa() está retornando null.

rocha
Na classe de negocio fiz isso:
public void salvar() { 
    CadEmpresa form = new CadEmpresa();
    Empresa empresa = new Empresa();
    empresa = form.pegarDados();
    
    empresa.setIdEmpresa(new Integer(1)); 
    System.out.println("testeEventos");  
    neg.Salvar(empresa);
       
  }

mas continua o mesmo erro

mister_m

Tem certeza que o número da linha com erro em EmpresaDao não mudou?

Poste o stack trace da exceção atual e uma versão de EmpresaDao que possua o número das linhas do método cadastrar(…) ao lado.

rocha
testeEventos

java.lang.NullPointerException

at br.com.solutec.gestor.dao.empresa.EmpresaDao.cadastrar(EmpresaDao.java:42)

at br.com.solutec.gestor.negocio.empresa.NegocioEmpresa.Salvar(NegocioEmpresa.java:26)

at br.com.solutec.gestor.gui.controle.empresa.EventosEmpresaButtons.salvar(EventosEmpresaButtons.java:35)

at br.com.solutec.gestor.gui.components.StoolBar.btSalvarClick(StoolBar.java:126)

at br.com.solutec.gestor.gui.components.StoolBar.access$100(StoolBar.java:13)

at br.com.solutec.gestor.gui.components.StoolBar$2.actionPerformed(StoolBar.java:56)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)

at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)

at java.awt.Component.processMouseEvent(Component.java:5100)

at java.awt.Component.processEvent(Component.java:4897)

at java.awt.Container.processEvent(Container.java:1569)

at java.awt.Component.dispatchEventImpl(Component.java:3615)

at java.awt.Container.dispatchEventImpl(Container.java:1627)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)

Falha Negocio!!!

at java.awt.Container.dispatchEventImpl(Container.java:1613)

at java.awt.Window.dispatchEventImpl(Window.java:1606)

at java.awt.Component.dispatchEvent(Component.java:3477)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)

1 /* 2 * EmpresaDao.java 3 * 4 * Created on 22 de Abril de 2005, 13:33 5 */ 6 7 package br.com.solutec.gestor.dao.empresa; 8 9 import br.com.solutec.gestor.dao.comum.Conexao; 10 import br.com.solutec.gestor.dao.comum.Id; 11 import br.com.solutec.gestor.model.empresa.Empresa; 12 import java.sql.Connection; 13 import java.sql.PreparedStatement; 14 import java.sql.ResultSet; 15 import java.sql.Statement; 16 import java.util.ArrayList; 17 import java.util.List; 18 19 /** 20 * 21 * @author Rodrigo Rocha 22 */ 23 public class EmpresaDao { 24 private static Conexao cx = new Conexao(); 25 private static Connection conexao = cx.getConexao(); 26 /** Creates a new instance of EmpresaDao */ 27 public EmpresaDao() { 28 } 29 30 public Integer gerarId() throws Exception { 31 Id id = new Id(); 32 return id.gerarId("tbEmpresa", "idEmpresa"); 33 } 34 35 public void cadastrar(Empresa em) throws Exception { 36 37 if( em == null ) return; 38 //Statement st = conexao.createStatement(); 39 PreparedStatement ps = null; 40 try { 41 String sql = "INSERT INTO tbEmpresa ( idEmpresa, rzsocial, apelido, dtVencimento) VALUES (?,?,?,?)"; 42 ps = conexao.prepareStatement(sql); 43 ps.setInt(1, em.getIdEmpresa().intValue()); 44 ps.setString(2, em.getRzSocial()); 45 ps.setString(3, em.getApelido()); 46 ps.setString(4, em.getDtVencimento()); 47 ps.execute(); 48 } finally { 49 if(ps!=null) try {ps.close(); } catch( Exception e ) {} 50 if(ps!=null) try {conexao.close(); } catch( Exception e ) {} 51 } 52 } 53 54 }

mister_m

Seu objeto conexao está nulo. O problema é descobrir o porquê.

rocha

Mister_m

consegui resover o problema da conexao só q agora me aparece o seguinte erro:

testeEventos

org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error

SQL error code = -204

Table unknown

TBEMPRESA

At line 1, column 13.

at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:91)

at org.firebirdsql.jdbc.FBPreparedStatement.<init>(FBPreparedStatement.java:34)

at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:682)

at org.firebirdsql.jdbc.AbstractConnection.prepareStatement(AbstractConnection.java:232)

at br.com.solutec.gestor.dao.empresa.EmpresaDao.cadastrar(EmpresaDao.java:41)

Já tentei com o nome da tabela em maiusculo e minusculo e nda

mister_m

Bem, de firebird não entendo muito. Alguém que saiba mais do banco talvez possa te orientar melhor, mas verifique se você não precisa prefixar o nome da tabela com o usuário que a criou, algo como usuario.tbempresa.

rocha

Mister_m valeu!!! é algum problema no driver… no bd o nome da tabela e das colunas tem q ser em maiusculo… usando hibernate não é necessário isso… mas enfim assim resolve… não adianta colocar minusculo no bd e minusculo na chamada q não rola… no bd tem q ser maiusculo mesmo e na chamada tanto faz… Valeu pela força!!!

P

Ae pessoal tbm estou com problemas com programa, dando o mesmo tipo de erro…estou usando eclipseME e fiz uma mini agenda pra teste que vi num livro, mas quando emulo, ele roda certo e tal, mas quando vai mostrar os dados no emulador dá essa exception…alguém poderia me ajudar por favor!!! :shock:
Aí vai o código e o erro…acredito que esteja na parte do getcommand…

public class Agenda extends MIDlet implements CommandListener, RecordComparator, RecordFilter{

private Form mainForm = new Form(RedordeStore);

private StringItem resultItem = new StringItem("", “”);

private Command saveCommand   = new Command (Salvar, Command.SCREEN, 1);

private Command getCommand    = new Command (Get, Command.SCREEN, 1);

private Command infoCommand   = new Command (Info,Command.SCREEN, 1);

private Command deleteCommand = new Command (Apagar,Command.SCREEN, 1);

private Command exitCommand   = new Command (Sair, Command.SCREEN, 10);

public String title;

public String actors;

public long   year;

private final Filme[] filmes = {

new Filme(Prata, Bonito, Simpático, Modesto, 1982),

new Filme(Bortho, Tosco, Rene Jr, Capiau, 1981),

new Filme(The Cebola, Feio, Alcóolatra, Capiau, 1983),

new Filme(The Paulo, Milho, Japonês, Selvagem, 1984)

};

public Agenda() {

super();

// TODO Auto-generated constructor stub

mainForm.append(resultItem);

mainForm.addCommand(saveCommand);

mainForm.addCommand(getCommand);

mainForm.addCommand(infoCommand);

mainForm.addCommand(deleteCommand);

mainForm.addCommand(exitCommand);

mainForm.setCommandListener(this);

}

public void writeObject(DataOutputStream dos) throws IOException{

dos.writeUTF(title);

dos.writeUTF(actors);

dos.writeLong(year);
}
public void readObject(DataInputStream dis) throws IOException{
	title = dis.readUTF();
	actors = dis.readUTF();
	year = dis.readLong();
	
}
protected void startApp() throws MIDletStateChangeException {
	// TODO Auto-generated method stub
	Display.getDisplay(this).setCurrent(mainForm);
}
protected void pauseApp() {
	// TODO Auto-generated method stub
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
	// TODO Auto-generated method stub
}
public void commandAction(Command c, Displayable d){
	RecordStore store = null;
	String recordStoreName = "MinhaAgenda";
	try {
		if (c == saveCommand){
			store = RecordStore.openRecordStore(recordStoreName, true);
			for (int i=0; i < filmes.length; i++){
ByteArrayOutputStream bos = new ByteArrayOutputStream ();
            DataOutputStream dos = new DataOutputStream(bos);
				filmes[i].writeObject(dos);
				byte[] ba = bos.toByteArray();
				store.addRecord(ba, 0, ba.length);
			}
			store.closeRecordStore();
			resultItem.setLabel("Status:");
			resultItem.setText(filmes.length + " dados gravados");
		}
		else if (c== getCommand){
			store = RecordStore.openRecordStore(recordStoreName, false);
			StringBuffer result = new StringBuffer();
			RecordEnumeration re = store.enumerateRecords(null, this, false);
			int i=1;				
			while (re.hasNextElement()){
				ByteArrayInputStream bis = new ByteArrayInputStream(re.nextRecord());
				DataInputStream dis = new DataInputStream(bis);
				Filme filme = new Filme();
				filme.readObject(dis);
				result.append(i++ +": " + filme.title + '\n');
			}
			store.closeRecordStore();
			resultItem.setLabel("Status:");
			resultItem.setText(result.toString());
		}
O erro:

java.lang.NullPointerException

java.lang.NullPointerException

at java.io.ByteArrayInputStream.(+21)

at AgendaMidlet.Agenda.compare(+13)

at javax.microedition.rms.RecordEnumerationImpl.QuickSort(+68)

at javax.microedition.rms.RecordEnumerationImpl.reFilterSort(+123)

at javax.microedition.rms.RecordEnumerationImpl.rebuild(+27)

at javax.microedition.rms.RecordEnumerationImpl.(+41)

at javax.microedition.rms.RecordStore.enumerateRecords(+15)

at AgendaMidlet.Agenda.commandAction(+167)

at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282)

at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10)

at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68)

at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(+47)

at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+250)

java.lang.NullPointerException

at AgendaMidlet.Agenda.compare(+96)

at javax.microedition.rms.RecordEnumerationImpl.QuickSort(+68)

at javax.microedition.rms.RecordEnumerationImpl.reFilterSort(+123)

at javax.microedition.rms.RecordEnumerationImpl.rebuild(+27)

at javax.microedition.rms.RecordEnumerationImpl.(+41)

at javax.microedition.rms.RecordStore.enumerateRecords(+15)

at AgendaMidlet.Agenda.commandAction(+167)

at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282)

at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10)

at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68)

at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(+47)

at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+250)
Criado 25 de abril de 2005
Ultima resposta 8 de ago. de 2006
Respostas 17
Participantes 4