Date null, erro!

29 respostas
rafa120

Pessoal

Já pesquisei no forum, achei os codigos.. mas mesmo assim ainda nao consegui usar eles.

Tenho os jFormattedTextField no formulario, para o tipo data
só que se eu nao quiser preencher, tem q ficar em branco e receber null no banco, certo?
só que eu estou achando jeito pra isso

Date emissao;

            if (txtEmissao1.getText().length() == 0){
            emissao = null;
            }
            else{
            emissao = new SimpleDateFormat("dd/MM/yyyy").parse(txtEmissao1.getText());
            }
cad.setEmissao(emissao);
ERRO:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

29 Respostas

B

Será que não está vindo null no seu getText() não ? Tenta fazer assim:

if (txtEmissao1.getText() == null){ 
   emissao = null;  
 }
rafa120

breno500as:
Será que não está vindo null no seu getText() não ? Tenta fazer assim:

if (txtEmissao1.getText() == null){ emissao = null; }

Pois é, mas ai da este erro

SEVERE: null java.text.ParseException: Unparseable date: ""

evertonsilvagomesjav

breno500as:
Será que não está vindo null no seu getText() não ? Tenta fazer assim:

if (txtEmissao1.getText() == null){ emissao = null; }

Se eu nao me engano isso ai nao vai testar nada, só vai dar nullpointer de novo se for null

pra testar se estar vazio faça:

if (txtEmissao1.getText().isEmpty()){ 
   emissao = null;  
 }
evertonsilvagomesjav

tenta ai do jeito que eu postei

B

Sem a exceção inteira fica dificíl saber onde estava o null pointer…

rafa120

Entao, nos 2 jeito ai se eu colocar uma data, ele cadastra corretamente
ta dando erro mesmo só se nao colocar nada

ERRO:
se eu clico na linha do erro “at obras.dao.ContratoDao.adiciona(ContratoDao.java:90)
me leva ao meu DAO e aponta para esta linha

stmt.setDate(12, new Date(c1.getEmissao().getTime()));

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at obras.dao.ContratoDao.adiciona(ContratoDao.java:90) at obras.forms.cadastrar.CadContratos.cadastro(CadContratos.java:794) at obras.forms.cadastrar.CadContratos.btnGravarActionPerformed(CadContratos.java:663) at obras.forms.cadastrar.CadContratos.access$000(CadContratos.java:38) at obras.forms.cadastrar.CadContratos$1.actionPerformed(CadContratos.java:195) 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:2475) 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)

rogelgarcia

Olha, é o Mr Bean… :smiley:

Posta a sua classe ContratoDao

rafa120

era pra ser Mr. Beans!
rs...

public void adiciona(CadContrato c1) throws SQLException, ParseException
    {
        //Prepara a conexão
        String sql = "INSERT INTO cad_contratos (id_obra,id_contrato,contratada,servico,budget,"+
                "valor_contrato,valor_fat_direto,valor_sinal,reter_sinal,ret_contratual,cadastro,emissao,anexo)"+
                "VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement stmt = conexao.prepareStatement(sql);

        //Preenche os valores
        stmt.setString(1, c1.getObra());
        stmt.setString(2, c1.getId_contrato());
        stmt.setString(3, c1.getContratada());
        stmt.setString(4, c1.getServico());
        stmt.setDouble(5, c1.getBudget());
        stmt.setDouble(6, c1.getValor_contrato());
        stmt.setDouble(7, c1.getValor_fat_direto());
        stmt.setDouble(8, c1.getValor_sinal());
        stmt.setBoolean(9, c1.getReter_sinal());
        stmt.setFloat(10, c1.getRet_contratual());
        stmt.setDate(11, new Date(c1.getCadastro().getTime()));
        stmt.setDate(12, new Date(c1.getEmissao().getTime()));
        //stmt.setDate(8, new Date(c1.getTermino_previsto().getTime()));
        //stmt.setDate(9, new Date(c1.getEnvio_juridico().getTime()));
        //stmt.setDate(10, new Date(c1.getRetorno_assinado().getTime()));
        //stmt.setDate(11, new Date(c1.getEncerramento().getTime()));
        //stmt.setString(12, c1.getObservacoes());
        stmt.setBlob(13, c1.getAnexo());

        //Executa e fecha
        stmt.execute();
        stmt.close();
    }
rogelgarcia

Qual dessas linhas… é a linha 90 no seu arquivo???

rafa120

é essa

stmt.setDate(12, new Date(c1.getEmissao().getTime()));
rogelgarcia

Tem duas opcoes…

ou

c1 tá null

ou c1.getEmissao tá null…

veja aí no seu algorítmo… qual tá sendo null e aí vc consegue resolver…

rafa120

não entendi, como assim o c1 null?
ai embaixo tem a outra classe, tem mais variaveis, mas eu tirei aqui pra postar pq se nao ia ficar grande

public class CadContrato {

    private Date emissao;

    public Date getEmissao() {
        return emissao;
    }

    public void setEmissao(Date emissao) {
        this.emissao = emissao;
emmanuelrock

Carinha, eu acho que nessa linha:

emissao = new  SimpleDateFormat("dd/MM/yyyy").parse(txtEmissao1.getText());

o seu txtEmissao.getText() está retornando “”. Por isso a data não é “parseada”. Por que está vindo em branco.

rafa120

emmanuelrock:
Carinha, eu acho que nessa linha:

emissao = new  SimpleDateFormat("dd/MM/yyyy").parse(txtEmissao1.getText());

o seu txtEmissao.getText() está retornando “”. Por isso a data não é “parseada”. Por que está vindo em branco.

Creio que nao, sabe pq?
pq se eu coloco uma data, ele aceita e cadastra normalmente.

rafa120

no meu banco de dados (MySQL) esta por padrao assim:

Tipo: date
Nulo: sim
Padrão: NULL

tem alguma coisa a ver?

emmanuelrock

Já tentou isso:

if  (txtEmissao1.getText()==null || txtEmissao1.getText().equals("")){  
     emissao = null;  
 }else{  
     emissao = new SimpleDateFormat("dd/MM/yyyy").parse(txtEmissao1.getText());  
 }

Depois tenta fazer um insert manual no banco, e veja se o campo date pode receber null ou deve receber “”.

B

rafa120:
no meu banco de dados (MySQL) esta por padrao assim:

Tipo: date
Nulo: sim
Padrão: NULL

tem alguma coisa a ver?

Não…

Eu estou enganado ou você está com exceções diferentes ?? :slight_smile:

A melhor forma de se descobrir isto é depurar seu código, para saber onde está o erro e tratalo…

Se você está com null pointer, faça da forma que falei no primeiro post…Teste antes para ver se o objeto está null para depois acessar seus membros (getText(),getEmissao(),getTime())…Inclusive no seu CadastroDAO na linha 90…

Agora erro de ParseException é como nosso amigo falou acima…Você não pode dar um parse em uma String vazia “”, seria interessante você testar antes tbm:

if(!minhaString.equals("")){
        //faça...
   }
B

Deixa eu ir almoçar… :lol: … Boa sorte aí cara…

rafa120

emmanuelrock eu já tinha tentando tb com este seu exemplo, mas tb fica no mesmo erro

entao, para depurar nao é ctrl+shift+f5 ? ou estou pipocando?
ao apertar isso, aparece esta msg
Não há variáveis a serem exibidas porque não há thread atual
tipo null
valor null

no mesmo formulario, eu tenho campos do tipo numerico (double) que tb se nao preencher, insera o valor 0... e funciona direitinho

double budgett;
            if (txtBudget.getText().length()==0){
                budgett = 0;
            }
            else{
                budgett = Double.parseDouble(txtBudget.getText());

            cad.setBudget(budgett);
emmanuelrock

Seguinte. Manda escrever o conteudo do seu txtField antes da exceção, e veja o que imprime.

rafa120

desculpe a ignorancia, mas como faço isso

emmanuelrock

System.out.println(txtEmissao.getText());

rafa120

Ah ta, eu estava imaginando outra coisa.
apareceu nada, eu tenho um jformatted com / /
ai se eu coloco nele, é claro.. solta um / /
mas neste que estou testando (txtEmissao1), esta vazio mesmo

compile-single:
run-single:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at obras.dao.ContratoDao.adiciona(ContratoDao.java:90)
pedroroxd

ele ta saindo vazio?

B

Amigo se sua linha 90 for realmente isso aqui:

stmt.setDate(12, new  Date(c1.getEmissao().getTime()));

Então substitui essa linha por isso:

Date data = null;

  if(c1 != null && c1.getEmissao() != null){
       data =  new  Date(c1.getEmissao().getTime());
  }else{
       data = new Date(); //fica a seu critério instânciar com a data corrente ou deixar gravar nula...
  } 
  stmt.setDate(12, data);

Testa aí…

rafa120

deu certo breno500as

coloquei o teu codigo só q com esta alteração no else

}else{ data = null;

Obrigado a TODOS que ajudaram, e claro que sempre ajude outros que precisarem!

rogelgarcia

Esse é o Breno…

É um Javeiro

:smiley:

rafa120

hehe
Resolvido :wink:

pacscam

Adoro esse fórum!
atrasado post meio antigo mais me ajudou muito.
valeu galera. :smiley:

Criado 27 de março de 2010
Ultima resposta 22 de set. de 2010
Respostas 29
Participantes 7