Tenho um pequeno código que calcula o IMC utilizando JOptionPane. Utilizo uma classe principal que roda o main e uma secundária para cuidar das entradas e saídas do programa chamada MyIO. Dentro dessa classe meu método readDouble recebe como parâmetro uma string com a mensagem do dado solicitado (altura ou peso), converte a saída do JOptionPane(String) para double e retorna esse valor.
Ao colocar ponto para a altura ex.(1.76), funciona. Porém com a vírgula recebo um NumberFormatException . Tentei tratar essa exceção usando try/catch mas o mesmo não é “capturado” pelo catch ocasionando falha na execução. o que pode ser?
public static double readDouble(String message) { //método que recebe uma string com a mensagem solicitando o dado (altura ou número)
String input = ""; //inicio variável que possa ser usada em cada bloco try/catch
double value = 0; //inicio variável ...
try {
input = JOptionPane.showInputDialog(message); // pede o dado
value = Double.parseDouble(input); //converte o input em variável tipo double
} catch (InputMismatchException e) {
write("Use ponto ao invés de vírgula"); //exception
readDouble(message); //invoca novamente o método
} catch (NumberFormatException e) {
double newValue = Double.parseDouble(input); //caso use vírgula definindo entrada para float que causa NumberFormatException converte float para double
value = newValue; //define valor convetido para variável "global"
}
return value;
}