java.lang.NumberFormatException: error nulo en Java
Este tutorial demuestra el error java.lang.NumberFormatException: null
en Java.
el error java.lang.NumberFormatException: null
en Java
La NumberFormatException
generalmente ocurre cuando intentamos convertir una cadena con formato incorrecto en un valor numérico. Esta excepción significa que es imposible convertir la cadena en un valor numérico.
La NumberFormatException
es una excepción en tiempo de ejecución, una subclase de IllegalArgumentException
. Esta excepción se puede manejar usando los bloques try-catch
.
La NumberFormatException
con un valor nulo ocurre cuando intentamos convertir un valor nulo en un número entero.
La NumberFormatException
con el valor nulo ocurre cuando usamos JSP y no podemos obtener el valor numérico correctamente de un campo de formulario. Las principales razones de esta excepción son:
- Cuando se trabaja con formularios y valores numéricos y no se pueden obtener correctamente los valores numéricos del campo en la página de acción.
- Cuando la cadena del campo está vacía o es nula.
Probemos un ejemplo que arroja la excepción java.lang.numberformatexception: null
:
Ejemplo (NewForm.jsp
):
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Calculator</title>
</head>
<body>
<form action="ExampleMath" method="post">
Enter first number : <input type="number" id="first" required><br>
Enter second number : <input type="number" id="second" required><br>
<input type="radio" id="add" name="math" value="add">
<label for="addition">Addition</label><br>
<input type="radio" id="sub" name="math" value="sub">
<label for="substraction">Subtraction</label><br>
<input type="radio" id="multi" name="math" value="multi">
<label for="multiplication">Multiplication</label><br>
<input type="radio" id="div" name="math" value="div">
<label for="division">Division</label><br><br>
<input type="submit" value="Check Result">
</form>
</body>
</html>
Y el servlet para esto es ExampleMath.java
:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/ExampleMath")
ExampleMath public class ExampleMath extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest HTTP_Request, HttpServletResponse HTTP_Response)
throws ServletException, IOException, NumberFormatException {
HTTP_Response.setContentType("text/html");
PrintWriter Print_Writer = HTTP_Response.getWriter();
int Number1 = Integer.parseInt(HTTP_Request.getParameter("first"));
int Number2 = Integer.parseInt(HTTP_Request.getParameter("second"));
String Symbol = HTTP_Request.getParameter("math");
int result = 0;
if (Symbol.equals("addition"))
result = Number1 + Number2;
else if (Symbol.equals("substraction"))
result = Number1 - Number2;
else if (Symbol.equals("multiplication"))
result = Number1 * Number2;
else
result = Number1 / Number2;
Print_Writer.println(result);
}
}
El código anterior arroja la excepción NumberFormatException
con un valor nulo porque no puede obtener los valores de los campos del formulario. Ver salida:
HTTP Status 500 – Internal Server Error Type Exception Report
Message null
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
java.lang.NumberFormatException: null
java.base/java.lang.Integer.parseInt(Integer.java:614)
java.base/java.lang.Integer.parseInt(Integer.java:770)
DemWeb.ExampleMath.doPost(ExampleMath.java:19)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:689)
jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
La solución para esto será tratar de evitar un valor nulo. Y aquí, el problema es que estamos tratando de usar ids en el campo en lugar de parámetros de nombre; por eso el sistema no puede detectar los campos.
Cambiar ids a nombres resolverá el problema. Aquí está la solución en NewForm.jsp
.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Calculator</title>
</head>
<body>
<form action="ExampleMath" method="post">
Enter first number : <input type="number" name="first" required><br>
Enter second number : <input type="number" name="second" required><br>
<input type="radio" id="add" name="math" value="add">
<label for="addition">Addition</label><br>
<input type="radio" id="sub" name="math" value="sub">
<label for="substraction">Subtraction</label><br>
<input type="radio" id="multi" name="math" value="multi">
<label for="multiplication">Multiplication</label><br>
<input type="radio" id="div" name="math" value="div">
<label for="division">Division</label><br><br>
<input type="submit" value="Check Result">
</form>
</body>
</html>
Después de ejecutar el código, la salida será:
Después de hacer clic en el botón Comprobar resultado
, obtenemos:
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn FacebookArtículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase