NumberFormatException Java

15 respostas
programaçãojavamysql
felipe1234

Pessoal chamei um metodo chamado mostrarPro2(Integer.parseInt(txtID.getText()),txtNome.getText()) e passei como parametro um valor int e outro String. e coloquei junto com o, metodo initComponents() para mostrar ao carregamento da interfce, mas apresenta o seguinte erro NumberFormatException.
Meu código ficou assim:

[CODE]

public Vendas2() {
initComponents();

setLocationRelativeTo(null);
    setSize(400, 300);
   
   // con = Conecta.conexao();
    
    
    this.adicionaCombo();
    mostrarPro2(Integer.parseInt(txtID.getText()),txtNome.getText());//Erro nessa linha NumberFormatException

    mostrar();
    getCodigo();
}
void mostrarPro2 (int id,String nome){

try {

DefaultTableModel modelo;

VendasDAO vend= new VendasDAO();
modelo=vend.mostrarConsulta(Integer.parseInt(txtID.getText()),txtNome.getText());
        
        
        jTable1.setModel(modelo);
        ocultar_colunas();
       
        
        
    } catch (Exception e) {
        System.out.println("Erro ao mostrar dados dos produtos :\n Erro:" + e.getMessage());
        
        
    }


}

[CODE]

15 Respostas

lvbarbosa
Integer.parseInt(txtID.getText())

NumberFormatException provavelmente é atirada nesse momento. É difícil dizer sem olhar o stack trace inteiro, mas com a informação que tenho agora, diria que é ali.

Dê uma olhada na documentação do método para entende-lo melhor:

https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#parseInt-java.lang.String-

Resumindo:

A String que é passada como argumento deve ter apenas caracteres decimais, números de 0 a 9, com exceção do primeiro caractere, que pode ser um - para indicar que o número é negativo, ou um + para indicar que é positivo.

NumberFormatException acontece quando a String passada não obedece esse formato.

felipe1234

Mas no metodo mostrarPro2() eu coloquei dois parametros um inteiro e outro String

lvbarbosa

Você está fazendo uma chamada para o Integer.parseInt(...) como primeiro argumento do mostraPro2(). Essa chamada pode falhar, se a String passada para o .parseInt for inválida.

felipe1234

mas porque ela da como invalida ?

lvbarbosa

Você leu o que eu escrevi? Hahahahaha

felipe1234

então para que isso funcione preciso tirar o valor que esta em inteiro id ?

lvbarbosa

txtID é um campo de texto, certo? Se você fizer:

String texto = txtID.getText();

A variável texto terá uma cópia do conteúdo do campo de texto.

Se você, em seguida, fizer algo como:

int id = Integer.parseInt(texto);

O conteúdo da variável texto é extremamente importante nesse momento. Se tiver qualquer coisa alem de um numero inteiro dentro dela, o método parseInt vai atirar uma NumberFormatException.

Como eu falei ali em cima, de acordo com a documentação do método, não pode haver absolutamente nada dentro dessa String alem de números, e, opcionalmente, um sinal de + ou - no início.

Exemplos de Strings VÁLIDAS:

"1"
"+1234123"
"-1"
"+0"
"-0"

Exemplo de Strings INVÁLIDAS:

"182334a1"
""
"+-1"
"00a"
" 3 2"
felipe1234

Então ao invés de int id seria String id ?

lvbarbosa

Não. Pode deixar o parâmetro do método como int id.

Você precisa entender que o que vem da caixa de texto é uma String, e você precisa converte-la para int antes de passar para o método mostraPro2. Para fazer isso, você utiliza o método estático Integer.parseInt(String s), que é o que eu to tentando te explicar como usa. Se você passa uma String que não tem conteúdo válido para o método parseInt, vai acontecer uma NumberFormatException.

felipe1234

int id = Integer.parseInt(txtID.getText());

mostraPro2(id);

Ficaria assim

felipe1234

fiz da forma que escrevi em cima e dessa:

String id= txtId.getText();
int i=Integer.valueOf(id).inValue()

Mas nenhuma deu certo

lvbarbosa

Isso, mas não estou falando para você mudar o teu código. Você não precisa atribuir o id convertido para uma variável temporária. Pode continuar do jeito como você está fazendo:

mostraPro2(Integer.parseInt(txtID.getText()));

O problema é que você está chamando o método txtID.getText() antes de haver qualquer coisa dentro desse campo de texto. O retorno dessa chamada é uma String vazia. Essa String vazia está sendo passada para o parseInt, e por isso acontece um NumberFormatException.

felipe1234

cara continua dando o mesmo erro

lvbarbosa

Você entendeu qual é o problema? Explica pra mim, pra eu ver se entendeu mesmo.

felipe1234

Dessa vez o erro acontece no botão consultar ele consulta e trás os dados normalmente através do id mas quando tento consultar um dado pelo nome ele mostra o erro java.lang.NumberFormatException: For input string: “”

[CODE]

int id = Integer.parseInt(txtId.getText());//Erro nessa linha
String nome= txtNomeProduto.getText();

mostrarPro2(id);
    if(nome!= ""){
      mostrarPro3(nome);
    }
   
    
    
    
}

[CODE]

Criado 13 de fevereiro de 2017
Ultima resposta 13 de fev. de 2017
Respostas 15
Participantes 2