java NullPointerException错误将int转换为string

时间:2015-02-20 23:30:15

标签: java

我有一个调用Java servlet的HTML表单,表单包含20个复选框(例如名称为c1c2c3 ... c20) 。

我试图在java布尔数组cbox中捕获这些复选框的值。

以下代码......

int ii=0;
boolean cbox[] = new boolean[20];
for (ii=0; ii<20; ii++)
   cbox[ii] = (req.getParameter("c"+String.valueOf((int)(ii+1))).equals("on"))?true:false;

给出java.lang.NullPointerException

但是,如果我要将其更改为(例如,移除ii中的valueOf),我就不会收到运行时错误:

   cbox[ii] = (req.getParameter("c"+String.valueOf((int)(1))).equals("on"))?true:false;

当然,这并不能让我到达我想要的地方。我必须在某个地方犯一个愚蠢的错误,但我无法发现它。有人看到了吗?

2 个答案:

答案 0 :(得分:2)

当您尝试引用未初始化的Object(null)时,会出现NullPointerException

查看您的代码,有两种可能性:

  • req为null req.getParameter
  • 您尝试检索的参数不存在,因此为空req.getParameter("c"+String.valueOf((int)(ii+1)))

顺便说一下,如果返回的参数已经是布尔值,则无需检查它的值并返回true或false,因为它的值已经为true或false。您可以将其简化为:

cbox[ii] = (req.getParameter("c"+String.valueOf((int)(ii+1))).equals("on"));

修改:要回答您的评论,您可以验证参数是否容易存在:

String param = req.getParameter("c" + String.valueOf(ii + 1));
cbox[ii] = "on".equals(param);

为了更安全,我还会检查req以确保它不为空。

if(req != null)
{
    String param = req.getParameter("c" + String.valueOf((ii + 1));
    cbox[ii] = "on".equals(param);
}

请注意,我删除了强制转换(int)ii + 1,因为表达式已经是整数类型。

此外,如果ii仅用作迭代器ID,则可以直接在循环中声明它,所以不要这样做:

int ii = 0;
for(ii = 0; ii < 20; ii++)

您可以直接撰写for(int ii = 0; ii < 20; ii++)

答案 1 :(得分:1)

这里的问题是在servlet中,您将收到on作为html选中复选框的默认值,否则为null。由于未选中所有复选框,因此您将获得NPE。试试这段代码:

boolean[] cbox = new boolean[20];
for(int i = 0; cbox.length > i; i++) {
   cbox[i] = null != req.getParameter("c" + (1 + i));//if not null then true else false
}

您还可以使用其他选项:

html / jsp 中创建具有相同名称但值不同的复选框:

<input type="checkbox" name="cbox" value="1"/>
<input type="checkbox" name="cbox" value="2"/>
...
<input type="checkbox" name="cbox" value="20"/>

servlet 中,您可以使用单行获取所有选中的复选框:

String[] cbox = req.getParameterValues("cbox");

此处,您不会将on视为值,{g}为12等等。只有复选框才能到达。