HOWTO · Java

java.lang.NumberFormatException: Java의 Null 오류

이 자습서는 Java의 java.lang.NumberFormatException: null 오류를 보여줍니다.

이 페이지의 내용

이 튜토리얼은 Java의 java.lang.NumberFormatException: null 오류를 보여줍니다.

Java의 java.lang.NumberFormatException: null 오류

NumberFormatException은 일반적으로 잘못된 형식의 문자열을 숫자 값으로 변환하려고 할 때 발생합니다. 이 예외는 문자열을 숫자 값으로 변환할 수 없음을 의미합니다.

NumberFormatExceptionIllegalArgumentException의 하위 클래스인 런타임 예외입니다. 이 예외는 try-catch 블록을 사용하여 처리할 수 있습니다.

null 값이 있는 NumberFormatException은 null 값을 정수로 변환하려고 할 때 발생합니다.

값이 null 인 NumberFormatException은 JSP를 사용하고 양식 필드에서 숫자 값을 제대로 가져올 수 없을 때 발생합니다. 이 예외의 주된 이유는 다음과 같습니다.

  1. 양식 및 숫자 값으로 작업할 때 작업 페이지의 필드에서 숫자 값을 제대로 가져올 수 없습니다.
  2. 필드의 문자열이 비어 있거나 null인 경우.

java.lang.numberformatexception: null 예외를 발생시키는 예제를 시도해 보겠습니다.

예(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>

그리고 이에 대한 서블릿은 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);
  }
}

위의 코드는 양식 필드에서 값을 가져올 수 없기 때문에 null과 함께 NumberFormatException 예외를 발생시킵니다. 출력 참조:

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)

이에 대한 해결책은 null 값을 피하는 것입니다. 여기서 문제는 필드에서 이름 매개변수 대신 ID를 사용하려고 한다는 것입니다. 이것이 시스템이 필드를 감지할 수 없는 이유입니다.

ID를 이름으로 변경하면 문제가 해결됩니다. 다음은 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>

코드를 실행한 후 출력은 다음과 같습니다.

NewForm

결과 확인 버튼을 클릭하면 다음을 얻습니다.

결과