【问题标题】:I am getting error 500 and null pointer exception我收到错误 500 和空指针异常
【发布时间】:2012-08-22 07:08:23
【问题描述】:

我正在用java制作在线考试项目。 我遇到了问题。

在开始时,我的数据库中有 15 个问题,我正在按顺序获取这些问题。 问题是,如果我尝试所有答案,我会得到结果,否则我会得到error 500NullPointerException。题目为多项选择题。每个问题都有四个选项。如果我没有尝试所有问题,则会出现上述错误。

<%@page import="java.sql.*"%>

<%
    String st[] = new String[20];
    String ans[] = new String[20];
    int k=0;
    //int length = Integer.parseInt(request.getAttribute("length").toString());
    for (int i = 0; i < 15; i++)
    {
        int j = i + 1;
        st[i] = request.getParameter("radio" + j);
        System.out.println(st[i]);
    }
    Class.forName("oracle.jdbc.OracleDriver");
    Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe", "root", "root");
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("Select ANS from ANSWERS order by ID");
    //String ans = "";
    int t;
    while (rs.next()) {

        ans[k] = rs.getString("ans");
        k++;
        System.out.println(ans[k]);
    }

    int count = 0;
    //String answers[] = ans.split(" ");
    for (int i = 0; i < 15; i++) {
        if (st[i].equals(ans[i])) {
            count++;
        }

    }
    out.println("Your " + count + " answers are correct");
%>

【问题讨论】:

  • 你的意思是如果你不尝试所有的问题,那么你会得到错误?
  • 在代码中使用断点,看看错误出现在哪一行
  • 查看this 以了解您的空指针异常意味着什么
  • NullPointerException 说明了什么?这通常会提示意外的 Null 在哪里。
  • JSP 中的代码块让我畏缩不前。 JSP 中的数据库代码让我哭了。

标签: java forms jsp


【解决方案1】:

在代码的开头,您使用request.getParameter("radio" + j); 初始化您的st[],这可能为空。根据javadocgetParameter()

将请求参数的值作为字符串返回,如果是 参数不存在。

所以当你尝试执行下面这段代码时:

for (int i = 0; i < 15; i++) {
    if (st[i].equals(ans[i])) {
        count++;
    }
}

st[i] 有可能实际上是 null。这可能可能是您的代码中出现NullPointerException 的原因

【讨论】:

    【解决方案2】:

    您应该将您的逻辑包含在 try catch 中,并最终处理连接的 SQL 异常,rs(在单独的 try catch 块中) 另外,尝试查看堆栈跟踪,看看哪一行给出了空指针异常

    【讨论】:

      【解决方案3】:

      我会说您的答案根本没有随您的请求一起提交。如果问题的单选组没有选定的值,则该单选组不会成为您在表单提交后处理的 POST 请求的一部分。

      这就是为什么你首先得到空指针异常的原因。 我无法运行您上面的示例,但我假设错误发生在示例末尾的比较行中:

      if (st[i].equals(ans[i])) {
      

      更新
      为了快速修复,只需将评估值切换:st[i].equals(ans[i])ans[i].equals(st[i])。这样,您始终可以对 null 进行等于并获得正确的计数。

      【讨论】:

      • 永远不要编写假定某些参数将或不会从客户端包含的逻辑。而是在服务器上处理 Null 场景。
      • @pap 你是对的。我只是想快速解决这个问题,这已经是一团糟,而且没有多大帮助。
      猜你喜欢
      • 2020-04-29
      • 2017-07-23
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多