Ajuda com campo em branco na interface

Pessoal estou com um problema no cadastro de um cliente no meu sistema.
É o seguinte, tem alguns campos no meu cadastro que eu quero deixa-los em branco pois ainda não possuo as informações para os respectivos campos, como cpf, rg e etc, Só que quando eu clico em cadastrar ele da a seguinte mensagem

Exception in thread “AWT-EventQueue-0” java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at Visao.CadastroCandidato.cadastrarCandidato(CadastroCandidato.java:178)
at Visao.CadastroCandidato.cadastrarActionPerformed(CadastroCandidato.java:904)
at Visao.CadastroCandidato.access$100(CadastroCandidato.java:29)
at Visao.CadastroCandidato$2.actionPerformed(CadastroCandidato.java:846)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:696)
at java.awt.EventQueue$4.run(EventQueue.java:694)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

estou utilizando o netbeans + hibernate para esse projeto, só que provavelmente o problema seja no codigo que deve estar faltando alguma coisa que deixe esses campos serem nulos ou em branco.

Alguem pode me ajudar em realção a isso como posso resolver esse pequeno problema??

Desde já agradeço pela atenção de você e muito obrigado.

Veja se em algum lugar você está passando string para um campo que só aceita numero.

Pode ser que no DB o campo está como string e você mandando numero, ou vice e versa.

Não nao ele so da esse erro se eu não preencher todos os campos do formulario, mas se eu preencher os campos do formulario ele nao da erro nenhum. Só que ai tem o problema, tem alguns campos que vão ficar em branco em determinados cadastros porque eu ainda n tenho as informações do candidato. Ai é que vem o meu problema quando eu deixo esses campos em branco da esse erro, só que quando eu preencho eles rodam tudo tranquilo sem dar erro.

Fala Marcelo,

No caso dos seus campos opcionais, seria legal você verificar antes de aplicar alguma validação. Ou seja, imagine seu campo “CPF” vazio, e mesmo assim você chamar seu validateCPF.
E de acordo com o stack passado, a aplicação está querendo converter um conteúdo “vazio” em número.

[quote=robinsonbsilva]Fala Marcelo,

No caso dos seus campos opcionais, seria legal você verificar antes de aplicar alguma validação. Ou seja, imagine seu campo “CPF” vazio, e mesmo assim você chamar seu validateCPF.
E de acordo com o stack passado, a aplicação está querendo converter um conteúdo “vazio” em número. Certifique-se que há conteudo válido para depois fazer algo!!

[/quote]

Desculpa ai pela duplicação, estranho que apenas editei minha resposta e apareceu um novo :oops:

Muito obrigado robinsonbsilva.

Acabei de verificar aqui, pois tenho o campo cep,telefone,celular, e alguns outros campos, mas tipo como eu faço para que esse erro não ocorra se eu deixa-los em branco? ou a unica manteira é alterando o tipo de inteiro para string e deixando de fazer essa conversao fazendo com q ele fique uma string assim ele nao vai precisar fazer mais essa conversao. Será que tem como fazer como a primeira opção?

Depende!!!

Você tem que analisar se esses campos "omitidos" são "NULL" na respectiva tabela no banco de dados, caso seja, só você não validar.

Parece complicado, mas é bem simples, pelo stack não dá para saber qual campo está disparando a exception, mas "debugando" vc consegue pegar o bendito!

Só mais uma dica, para esses campos opcionais, se der, na hora de dar um INSERT/UPDATE ao invés de inserir "vazio" -> "", manda um NULL

ex:

insert into table(numero_opcional, texto_opcional)values(NULL, NULL);

muitos fazem um If na aplicação e manda geramente assim: insert into table(numero_opcional, texto_opcional)values(0, ‘’);

Abs.

Opa eu ja vi quais sao os campos que estao passando por esse problema, só que eu estou utilizando o hibernate logo nao posso fazer o que robinsonbsilva falou, pois eu não faço a implementação no banco através do codigo.
Teria alguma outra forma que eu fizesse no codigo mesmo, alguma coisa para que eu possa passar esses campos nulos para o banco sem dar esse erro?

jovem,

só setar a propriedade do objeto que será persistido para null;

obj.setCpf(null);

O hibernate se encarrega do resto.

Olá robinsonbsilva tentei fazer oque você me falou mas nao funcionou pois ele mostra q esta errado. Porque ele quer que seja passado um objeto do tipo int e nao do tipo null.

de vez usar int usa Integer!

Opa robinsonbsilva tentei colocar integer mas ele continua com o mesmo erro. Será que tem outra forma?

Olá wellington.nogueira

Muito obrigado pela sua ajuda conseugi resolver meu problema com a sua ajuda.

Muito Obrigado mesmo :smiley:

Na verdade, no stack dá pra ele saber SEM debugar:

É só olhar no método cadastrarCandidato na linha 178 onde é chamado

Neste caso, qual o valor default a ser armazenado? se o campo for null, segue a dica do robinsonbsilva, se não for, pode usar um ternário como abaixo:

Como assim dá o mesmo erro? Você PRECISA tratar o erro para não ocorrer o NumberFormatException.

Na hora do parse (Integer.parseInt()) você está passando alguma informação inválida. E tenho certeza de que deve ser uma string vazia ("") que é o conteúdo do campo. Mas você não tem certeza se veio número, certo? Então, antes de fazer o parse você precisa verificar se pode fazer isso.

Integer variavelInt = null; if(variavelString != null && !variavelString.isEmpty() ) { //sua variavel não é nula nem vazia variavelInt = Integer.parseInt(variavelString); }

Se não entrar no if, continuará nula e esse valor será passado para o Hibernate.
Caso o campo seja not null, use

Integer variavelInt = 0; //Se for Java 6 ou superior //ou Integer variavelInt = new Integer(0);

Só complementando,
NumberFormatException é do tipo RuntimeException. Ou seja, é um erro não verificado. Se está ocorrendo, significa que alguma verificação anterior não está ocorrendo.
Se fosse uma exceção verificada, ele te forçaria a ter o bloco try-catch ou indicar que o método lança (throws) exceção e não seria necessário verificações pq as mesmas poderiam ficar dentro do bloco catch.