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

Sheeraz Gul 2023年10月12日
java.lang.NumberFormatException: Java の 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 ボタンをクリックすると、次の情報が得られます。

結果

著者: 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