java.lang.NumberFormatException: Java의 Null 오류

Sheeraz Gul 2023년10월12일
java.lang.NumberFormatException: Java의 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

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

결과

작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

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 Facebook

관련 문장 - Java Error