Problemas com a fachada.[RESOLVIDO]

11 respostas
marcoslogan

Oi, estou tendo problemas para inserir um registro no banco de dados.

Principalmente na fachada.

Toda vez que tento inserir um registro no banco de dados. Ele me retorna a seguinte exceção.

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at gui.CadFuncionario.jButton1ActionPerformed(CadFuncionario.java:499)
        at gui.CadFuncionario.access$000(CadFuncionario.java:26)
        at gui.CadFuncionario$1.actionPerformed(CadFuncionario.java:379)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Eu sei que esse tipo de exceção se refere que o programa tenta acessar um objeto que não foi instanciado.

Só que eu instanciei.

na fachada eu tenho um método chamado getInstancia(), ele justamente testa se há alguma referência a variável ambiente fachada.

método getInstancia.

public static void getInstancia()throws...{
        if(inst = null){
            //inst é uma referência a classe Fachada, na qual eu vou chamar o construtor privado.
           inst = new Fachada();//construtor privado.
        }

        


    }

11 Respostas

sandro.ci02

acho que faltou um =

public static void getInstancia()throws...{
        if(inst == null){
            //inst é uma referência a classe Fachada, na qual eu vou chamar o construtor privado.
           inst = new Fachada();//construtor privado.
        }
    }
marcoslogan

Eu sei, mas eu coloquei assim pois estava com pressa.

Mas no meu código não coloquei assim. eu coloquei com dois iguais “==”.

kemperacc

o que tem nesta linha:

gui.CadFuncionario.jButton1ActionPerformed(CadFuncionario.java:499)
marcoslogan

Eu chamo o método da fachada para inserir um funcionário.
Só que antes eu instancio essa classe e seto todos os valores.

marcoslogan

Galera, tah difícil de terminar esse programa.

Eu estava debugando o programa, vendo se eu tinha esquecido de instanciar alguma coisa.

Mas não eu não esqueci de instanciar nada.

Mas mesmo assim, está dando essa exceção. Eu simplesmente não sei o que é. Será que alguém poderia me dizer.

Estou mandando o Código para vocês estudarem.

//Código da Fachada

public static void getInstancia() throws ConexaoErroException, SQLException{
        if(instance == null){
           instance = new Fachada();//instance é uma referência à Classe Fachada estou testando se há alguma referência a fachada na memória, se não houver estou instanciando ela.
        }
    }



   private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
        try {
            Fachada.getInstancia();
            
            preencherAtributos();
            fachada.InserirFuncionario(funcionario);
            JOptionPane.showMessageDialog(null, "Funcionário Cadastrado Com Sucesso","Atenção!!!",
                    JOptionPane.INFORMATION_MESSAGE);
            jTNome.requestFocusInWindow();
        } catch (ConexaoErroException ex) {
            JOptionPane.showMessageDialog(null, "Erro de Conexão\n\n" + ex,"Erro de Conexão Com o Banco de Dados",
                    JOptionPane.ERROR_MESSAGE);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro de Instrução SQL.\n\n" + ex, "Erro de Instrução",
                    JOptionPane.ERROR_MESSAGE);
        } catch (ConsultaErroException ex) {
            JOptionPane.showMessageDialog(null, ex,"Erro durante a Consulta",
                    JOptionPane.ERROR_MESSAGE);
        } catch (FuncionarioNaoEncontradoException ex) {
            JOptionPane.showMessageDialog(null, ex, "Funcionário Não Encontrado",
                    JOptionPane.ERROR_MESSAGE);
        }

    }


   //Método PreencherAtributos - é o método que vai preencher todos os métodos set do funcionário com aquilo que eu digitar nos campos do formulário.

public void preencherAtributos(){
        SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");
        
        funcionario.setNome(jTNome.getText());
        funcionario.getEndereco().setRua(jTEndereco.getText());
        funcionario.getEndereco().setCidade(jTCidade.getText());
        funcionario.getEndereco().setBairro(jTBairro.getText());
        funcionario.getEndereco().setCep(jFTFCEP.getText());
        funcionario.getEndereco().setUf(jCUF.getSelectedItem().toString());
        funcionario.setSexo(jCSexo.getSelectedItem().toString());
        try {
            funcionario.setDataNascimento(formatar.parse(jFTFDataNascimento.getText()));
            funcionario.setDataAdmissao(formatar.parse(jFTFDataAdmissao.getText()));
        } catch (ParseException ex) {
            Logger.getLogger(CadFuncionario.class.getName()).log(Level.SEVERE, null, ex);
        }

        funcionario.setLogin(jTLogin.getText());
        funcionario.setSenha(jPFSenha.getPassword().toString());
        funcionario.setRg(jTRG.getText());
        funcionario.setCpf(jTCPF.getText());
        funcionario.setSalario(Double.parseDouble(jFTFSalario.getText()));
        funcionario.getContato().setTelefone(jFTelefone.getText());
        funcionario.getContato().setCelular(jFCelular.getText());
        funcionario.getContato().setEmail(jTEMail.getText());

        
        
        
    }//Esse método executa direitinho, não tem nenhum erro nele.
marcoslogan

Eu já depurei, mas está instanciando sim. Mas eu tenho um palpite do que está ocorrendo. Anteriormente, eu tenho outra versão desse programa, na camada de persistência (que eu chamei de repositório de dados), na versão anterior eu instanciava a classe que fazia a conexão com o banco de dados em todos os métodos das classes dos repositórios, resolvi testar e em vez de instanciar a classe que faz a conexão com o banco em cada método, resolvi colocar no construtor do repositório, e aí deu no que deu.

walacy

Eu diria que o erro está neste ponto:

funcionario.setNome(jTNome.getText());  
     // Faltou o set do Endereco.
     funcionario.getEndereco().setRua(jTEndereco.getText());

Confere ae amigo… Ou você fez um Lazy no get?

marcoslogan

Esse getEndereco ele retorna um objeto Endereco que é uma classe que contém informações sobre endereço em geral. Na minha aplicação, tem várias classes que tem esse tipo de informação, então criei uma classe mais genérica, que tivesse essas informações acessíveis para as demais classes. Tava dando pau porque eu não estava instanciando. Mas já resolvi esse problema.

Veja como fiz.

public Endereco getEndereco(){
      if(endereco == null){
           endereco = new Endereco();
      }

     return endereco;//endereço é uma variável de instância do tipo Endereco que contém informações sobre endereços em geral.
   }

na classe endereco tem os métodos get/set, da rua, bairro, cep, etc…

Eu estou desconfiado que tá dando pau no repositório.

marcoslogan

Pessoal, estava debugando o meu programa, me parece que o problema está na classe SimpleDateFormat, que eu instancio assim:

SimpleDateFormat formatar = new SimpleDateFormat("dd/MM/yyyy");//o meu programa para aqui, e gera um NullPointerException.

Será que alguém poderia me ajudar?

marcoslogan

Pessoal, será que não tem ninguém que pode me ajudar? Por favor, estou precisando mesmo de ajuda, não sei o que fazer.

WellingtonRamos

Onde vc instanciou fachada?

Pq vi q vc usou o getInstancia mas dentro dele vc usa outro objeto (instance)…

Depure novamente e pare nessa linha e veja se fachada está instanciada.

Criado 9 de maio de 2010
Ultima resposta 12 de mai. de 2010
Respostas 11
Participantes 5