JSP java.lang.NullPointerException
我正在尝试对字符串数组排序并接收java.lang.NullPointerException。这只是代码的一部分,但它是与错误关联的相关部分。我知道当我初始化字符串数组myRows时,它会将值设置为null。但是,我正在检查是否为空,并将item_value、period_value和periodAmt_value的值设置为设置值。当我打印出数组的内容时,它确实包含设置的值。不理解java.util.Arrays.sort()为什么不能工作以及为什么会出错。非常感谢您的帮助JSP java.lang.NullPointerException,java,jsp,Java,Jsp,我正在尝试对字符串数组排序并接收java.lang.NullPointerException。这只是代码的一部分,但它是与错误关联的相关部分。我知道当我初始化字符串数组myRows时,它会将值设置为null。但是,我正在检查是否为空,并将item_value、period_value和periodAmt_value的值设置为设置值。当我打印出数组的内容时,它确实包含设置的值。不理解java.util.Arrays.sort()为什么不能工作以及为什么会出错。非常感谢您的帮助 在查看您的异常日志后
在查看您的异常日志后,我可以高度肯定地说,您的问题是由于试图对包含空元素的数组进行排序。考虑到您的代码流,我强烈支持我之前的建议,即完整构建数组,然后对其进行排序,然后使用它生成html。您能粘贴准确的错误消息(带有行号…)吗?看起来您每次都在循环中调用sort,因此第一次2个元素将为空,因此出现了NullPointerException。以下
java.util.Arrays.sort(myRows)的行号是多少代码>?感谢您的快速响应感谢您的快速响应。当你说整体构建阵列时,你的确切意思是什么?我对java非常陌生,需要用一个值完全初始化数组中的每个元素。然后对数组进行排序。然后循环排序数组并生成HTML。目前,您正试图在相同的for循环中初始化值、排序数组和生成html,这就是导致您出现问题的原因。谢谢Deadron…我感谢您的输入!!
org.apache.jasper.JasperException
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
root cause
java.lang.NullPointerException
java.util.Arrays.mergeSort(Arrays.java:1156)
java.util.Arrays.sort(Arrays.java:1080)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
String item_name;
String item_value;
String period_name;
String period_value;
String periodAmt_name;
String periodAmt_value;
String annualAmt_name;
int error_count = 0;
int annualAmt_value = 0;
int totalExp = 0;
String[] myRows = new String[3];
for (int i=0; i < 3; i++)
{
item_name = "item" + i;
item_value = request.getParameter(item_name);
if (item_value == null)
{
item_value = "Rent";
}
period_name = "period" + i;
period_value = request.getParameter(period_name);
if (period_value == null)
{
period_value = "52"; //default value
}
periodAmt_name = "periodAmt" + i;
periodAmt_value = request.getParameter(periodAmt_name);
if (periodAmt_value == null)
{
periodAmt_value = "520";
}
myRows[i] = item_value + "|" + period_value + "|" + periodAmt_value;
out.println(myRows[i]);
java.util.Arrays.sort(myRows);
String text = myRows[i];
StringTokenizer st = new StringTokenizer(text, "|");
String[] myFields = new String[st.countTokens()];
out.println("<tr>");
for (int j = 0; j < myFields.length; j++)
{
myFields[j] = st.nextToken();
if(j==0)
{
out.println("<td><input type=text name=" + item_name + " value=" + myFields[j] + "></td>\n");
}