HOWTO · Java

java.lang.NumberFormatException: Java の Null エラー

このチュートリアルでは、Java の java.lang.NumberFormatException: null エラーについて説明します。

このチュートリアルでは、Java の java.lang.NumberFormatException: null エラーについて説明します。

java.lang.NumberFormatException: null Java のエラー

NumberFormatException は通常、不適切な形式の文字列を数値に変換しようとすると発生します。 この例外は、文字列を数値に変換できないことを意味します。

NumberFormatException はランタイム例外であり、IllegalArgumentException のサブクラスです。 この例外は、try-catch ブロックを使用して処理できます。

null 値を整数に変換しようとすると、null 値を持つ NumberFormatException が発生します。

JSP を使用し、フォーム フィールドから適切に数値を取得できない場合、値が null の NumberFormatException が発生します。 この例外の主な理由は次のとおりです。

  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

Check Result ボタンをクリックすると、次の情報が得られます。

結果