[Resolvido] Erro com campos vazios de JTextField no Java

Olá,

Eu criei um programa que recebe 2 valores inteiros e mostra a SOMA dos 2 valores recebidos.

O problema que está ocorrendo, é que quando os campos do JTextField estão VAZIOS e eu clico no botão de “Soma”, o compilador interpreta como “erro”.

Qual a melhor forma de resolver isso? Queria manter o código o mais simples possível.

> b1.addActionListener(new ActionListener()
> 	  {
> 		  public void actionPerformed(ActionEvent e)
> 		  {
> 	         // t1.setText("Test");
> 			 int primeiroNumero = 0;
> 			 primeiroNumero = Integer.parseInt(t1.getText());
> 			 
> 			 int segundoNumero = 0;
> 			 segundoNumero = Integer.parseInt(t2.getText());
> 			 
> 			 int resultado = 0;
> 			 resultado = (primeiroNumero + segundoNumero);
> 			 
> 			 JOptionPane.showMessageDialog(null, "Resultado da Soma: " + resultado,
>                                            "Soma", JOptionPane.PLAIN_MESSAGE);
> 		  }
> 	  });

Erro:

Obrigado por qualquer ajuda!

Envolva sua lógica em um try catch:

try {
    //Lógica aqui 
} catch (NumberFormatException ex) {
    //Campos vazios ou número inválido, mostre um JOptionPane com uma msg de erro
}
1 curtida

Muito obrigado amigo, pela ajuda!

Mas antes de colocar um try/catch eu gostaria de resolver o erro.

Eu tentei verificar antes se os textboxs estavam "vazios’ pra tomar uma ação. Não estou conseguindo resolver isso.

b1.addActionListener(new ActionListener()
  {
	  public void actionPerformed(ActionEvent e)
	  {	 
         // t1.setText("Test");
		 int primeiroNumero = 0,segundoNumero = 0,resultado = 0;
		 if((t1.getText() == " ") || (t2.getText() == " "))
	     {
			 JOptionPane.showMessageDialog(null, "ERRO em JTField", "Erro", JOptionPane.ERROR_MESSAGE); 
		 }else
         {
	        primeiroNumero = Integer.parseInt(t1.getText());
			segundoNumero = Integer.parseInt(t2.getText());
		 }
		 resultado = (primeiroNumero + segundoNumero);
		 
		 JOptionPane.showMessageDialog(null, "Resultado da Soma: " + resultado,
                                       "Soma", JOptionPane.PLAIN_MESSAGE);
	  }
  });

Aqui eu consegui um pouco de informação sobre o ERRO:

Estou tentando resolver essa parte.

Obrigado por qualquer ajuda.

Strings devem ser comparadas com equals, não com == (leia aqui para saber mais). E de qualquer forma, você está vendo se elas são iguais a um espaço (já que tem um espaço entre as aspas), mas na verdade deveria ver se elas são vazias:

if ("".equals(t1.getText()) || "".equals(t2.getText())) { 
    // erro
}

Repare que usei "" (nada entre as aspas) em vez de " " (um espaço entre as aspas). O primeiro é uma string vazia (tamanho zero, não contém nenhum caractere), a segunda não (é uma string com tamanho 1, pois tem um caractere - o espaço em branco).


Outra alternativa é usar isEmpty:

if (t1.getText().isEmpty() || t2.getText.isEmpty()) { 
    // erro
}

E a partir do Java 11 você pode usar isBlank também. A diferença é que isEmpty verifica se a string é vazia (ou seja, se nada foi digitado), enquanto isBlank também verifica se a string só tem espaços.

1 curtida

Certo. Obrigado amigos. Deu certo.

Código:

b1.addActionListener(new ActionListener()
	  {
		  public void actionPerformed(ActionEvent e)
		  {	 
	         // t1.setText("Test");
			 int primeiroNumero = 0, segundoNumero = 0, resultado = 0;
			 if((t1.getText().isEmpty()) || (t2.getText().isEmpty()))
		     {
				 JOptionPane.showMessageDialog(null, "ERRO em JTField1", "Erro", JOptionPane.ERROR_MESSAGE); 
		     }
			 
			 if(("".equals(t1.getText() == "")) || "".equals((t2.getText() == "")))
		     {
				 JOptionPane.showMessageDialog(null, "ERRO em JTField2", "Erro", JOptionPane.ERROR_MESSAGE); 
			 }else
	         {
				primeiroNumero = Integer.parseInt(t1.getText());
		        primeiroNumero = Integer.parseInt(t1.getText());
				segundoNumero = Integer.parseInt(t2.getText());
			 }
			 resultado = (primeiroNumero + segundoNumero);
			 
			 JOptionPane.showMessageDialog(null, "Resultado da Soma: " + resultado,
                                           "Soma", JOptionPane.PLAIN_MESSAGE);
		  }
	  });

Erro capturado pelo sistema:

Muito obrigado pela ajuda!

Essa verificação não faz o menor sentido e nunca vai ser verdadeira.

Aqui nessa primeira você pode dar um return; para o resto do código não ser executado.

Você já tentou digitar uma letra nesses campos?

Se você já usou isEmpty acima, então pode remover esse if (até porque ele está completamente errado, já que vc colocou a comparação com == dentro do equals (ou seja, está comparando o resultado da comparação, que será um booleano, com a string vazia).

Enfim, deixe somente o primeiro if (com isEmpty). Mas não deixe de capturar a exceção mesmo assim:

if(t1.getText().isEmpty() || t2.getText().isEmpty()) {
    JOptionPane.showMessageDialog(null, "ERRO em JTField1", "Erro", JOptionPane.ERROR_MESSAGE);
} else {
    try {
        primeiroNumero = Integer.parseInt(t1.getText());
    } catch (NumberFormatException e) {
        // se a string não é vazia, mas não é um número, então vai dar erro do mesmo jeito
    }
}

O try/catch é porque, mesmo se a string não for vazia, ainda poderá não ser um número (por exemplo, se digitar “abc”), ou seja, Integer.parseInt ainda poderá dar erro e você deve tratar isso.

1 curtida

Muito obrigado pela ajuda. Li todas as respostas e tentei aprender com elas.

Segue o código mais limpo. Esta tudo funcionando como eu gostaria. O try/catch esta funcionando perfeitamente também:

b1.addActionListener(new ActionListener()
{

    public void actionPerformed(ActionEvent e)
    {	 
       try
       {
       // t1.setText("Test");
  	 int primeiroNumero = 0, segundoNumero = 0, resultado = 0;
  	
  	 
  	 if((t1.getText().isEmpty()) || (t2.getText().isEmpty()))
       {
  		 JOptionPane.showMessageDialog(null, "ERRO em JTField1", "Erro", JOptionPane.ERROR_MESSAGE); 
       }else
       {
  		primeiroNumero = Integer.parseInt(t1.getText());
          primeiroNumero = Integer.parseInt(t1.getText());
  		segundoNumero = Integer.parseInt(t2.getText());
  		resultado = (primeiroNumero + segundoNumero);
  		JOptionPane.showMessageDialog(null, "Resultado da Soma: " + resultado,
                                          "Soma", JOptionPane.PLAIN_MESSAGE);
  	 }
      }catch(Exception ex)
      {
         JOptionPane.showMessageDialog(null, "Erro try/catch: ", "Erro", JOptionPane.ERROR_MESSAGE);
      }
    }
});

Obrigado!