关于空指针异常。始终不知道哪里出错。求解

培根0327 2014-04-18 08:53:48
中间很多代码功能重复。因为字符限制,就没粘贴

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import=" java.util.ArrayList"%>
<%@ page import="crm.domain.Dutyplan" %>
<%@ page import="crm.Utils.*" %>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>值班安排</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
</head>

<body>
<div class="mtitle">
<div class="mtitle-row"> </div>
<span class="menu_selected">实验室值班安排</span>
</div>
<br>
<div class="border">
<%
//获取所有的实验室值班记录
List<Dutyplan> list = (List<Dutyplan>)request.getAttribute("list");
%>
<s:form name="form2" method="post" action="sys/dutyPlan_list.do" namespace="/sys">
<s:if test="#request.list!=null">
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="tabForm">
<!-- title -->
<tr>
<td width="9%" class="listViewThS1"></td>
<td width="13%" class="listViewThS1">星期一</td>
<td width="13%" class="listViewThS1">星期二</td>
<td width="13%" class="listViewThS1">星期三</td>
<td width="13%" class="listViewThS1">星期四</td>
<td width="13%" class="listViewThS1">星期五</td>
<td width="13%" class="listViewThS1">星期六</td>
<td width="13%" class="listViewThS1">星期日</td>
</tr>

<tr>
<td>上午</td>
<td> <%
for(int i=0;i<list.size();i++)
{ Dutyplan d=(Dutyplan)list.get(i);
if( d.getOndutytime().equals("上午")&&d.getWeekday()==1)
{out.println(d.getTeacher().getTeaname());
out.println("<br>");
out.println("第"+d.getWeeknumber()+"周");
}
}
%>
</td>
……
……
……
<td> <%

for(int i=0;i<list.size();i++)
{ Dutyplan d=(Dutyplan)list.get(i);
if( d.getOndutytime().equals("晚上")&&d.getWeekday()==7)
{out.println(d.getTeacher().getTeaname());
out.println("<br>");
out.println("第"+d.getWeeknumber()+"周");
}
}
%>
</td>
</tr>
</table>
</s:if>
</s:form>
</body>
</html>


异常提示:

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: java.lang.NullPointerException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:534)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)


root cause

java.lang.NullPointerException
org.apache.jsp.list_jsp._jspService(list_jsp.java:139)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:419)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:88)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.12 logs.
...全文
498 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
不是太高的手 2014-04-19
  • 打赏
  • 举报
回复
jsp里面还写了java代码、、、、貌似年代很久的代码了吧
tony4geek 2014-04-19
  • 打赏
  • 举报
回复
按楼上 那些做法,试试看吧。
scott_129 2014-04-19
  • 打赏
  • 举报
回复
先检查在你的后台代码是不是讲list设置到request中去了,然后用debug查看一下你的list是否获取到了值,如果为空,那后面所有的基于list的遍历肯定都会报指针了。按照这个一个个排除吧
vkqiang 2014-04-19
  • 打赏
  • 举报
回复
java.lang.NullPointerException org.apache.jsp.list_jsp._jspService(list_jsp.java:139) 看tomcat下work\Catalina\localhost生成的list_jsp.java代码的139行执行的是什么,然后判断是那的问题
Johnny-xz 2014-04-19
  • 打赏
  • 举报
回复
楼主,建议你不要在JSP页面中写java代码。这种写法都已经过时了,建议用jstl标签
Spring89 2014-04-18
  • 打赏
  • 举报
回复
去看看list_jsp.java第139行是哪一行?可能为null的地方有: 1:Dutyplan对象为null,随后调用其方法抛出空异常 2:如果上面的不为空,那就会是调用方法时返回null,比如这里:d.getOndutytime().equals("晚上")。如果d.getOndutytime()返回null,就抛异常了! 这样找太麻烦了,直接去看list_jsp.java第139行,立马可以知道是哪一行出现null了!
Gaken 2014-04-18
  • 打赏
  • 举报
回复
空指针错误,一般第一反应就数组、List、Map等赋了空值或下标异常
Fate- 2014-04-18
  • 打赏
  • 举报
回复
org.apache.jsp.list_jsp._jspService(list_jsp.java:139) 应该是这个地方nullpointer <% //获取所有的实验室值班记录 List<Dutyplan> list = (List<Dutyplan>)request.getAttribute("list"); %>
S117 2014-04-18
  • 打赏
  • 举报
回复
引用 6 楼 u014778398 的回复:
[quote=引用 1 楼 longtian1213 的回复:] 我去,这太难看了!建议你检查下几个地方! 1、 List<Dutyplan> list = (List<Dutyplan>)request.getAttribute("list"); 这个list是否为null 2、 if( d.getOndutytime().equals("晚上")&&d.getWeekday()==7) d是否为空, d.getOndutytime()是否为null 3、d.getTeacher().getTeaname()) d.getTeacher()是否为null
<s:if test="#request.list!=null"> 我写了句这个 也是看到别人这样写的 不知道是否就算是判断是否为空吗 这句有用吗 [/quote] 太长时间没用了, 我也记不太清了!
S117 2014-04-18
  • 打赏
  • 举报
回复
引用 5 楼 u014778398 的回复:
[quote=引用 1 楼 longtian1213 的回复:] 我去,这太难看了!建议你检查下几个地方! 1、 List<Dutyplan> list = (List<Dutyplan>)request.getAttribute("list"); 这个list是否为null 2、 if( d.getOndutytime().equals("晚上")&&d.getWeekday()==7) d是否为空, d.getOndutytime()是否为null 3、d.getTeacher().getTeaname()) d.getTeacher()是否为null
是不是只需要先判断是否为空然后再进行条件判断? 如果确实为空,需要做什么处理么? 数据库里貌似目前还没有相关的数据[/quote] 太简单了,为空就不继续处理了!
培根0327 2014-04-18
  • 打赏
  • 举报
回复
引用 1 楼 longtian1213 的回复:
我去,这太难看了!建议你检查下几个地方! 1、 List<Dutyplan> list = (List<Dutyplan>)request.getAttribute("list"); 这个list是否为null 2、 if( d.getOndutytime().equals("晚上")&&d.getWeekday()==7) d是否为空, d.getOndutytime()是否为null 3、d.getTeacher().getTeaname()) d.getTeacher()是否为null
<s:if test="#request.list!=null"> 我写了句这个 也是看到别人这样写的 不知道是否就算是判断是否为空吗 这句有用吗
培根0327 2014-04-18
  • 打赏
  • 举报
回复
引用 1 楼 longtian1213 的回复:
我去,这太难看了!建议你检查下几个地方! 1、 List<Dutyplan> list = (List<Dutyplan>)request.getAttribute("list"); 这个list是否为null 2、 if( d.getOndutytime().equals("晚上")&&d.getWeekday()==7) d是否为空, d.getOndutytime()是否为null 3、d.getTeacher().getTeaname()) d.getTeacher()是否为null
是不是只需要先判断是否为空然后再进行条件判断? 如果确实为空,需要做什么处理么? 数据库里貌似目前还没有相关的数据
培根0327 2014-04-18
  • 打赏
  • 举报
回复
引用 3 楼 xiakepan 的回复:
引用 2 楼 xiakepan 的回复:
猜测你是form提交后出错吧?看看Action中字段get/set了没,如果用了Spring那么注入和get/set了没.
不好意思,我看错了,不是这个原因。
谢谢。呵呵。因为是第一次做项目,所以很多地方都不懂
番茄鲨鱼面 2014-04-18
  • 打赏
  • 举报
回复
引用 2 楼 xiakepan 的回复:
猜测你是form提交后出错吧?看看Action中字段get/set了没,如果用了Spring那么注入和get/set了没.
不好意思,我看错了,不是这个原因。
番茄鲨鱼面 2014-04-18
  • 打赏
  • 举报
回复
猜测你是form提交后出错吧?看看Action中字段get/set了没,如果用了Spring那么注入和get/set了没.
S117 2014-04-18
  • 打赏
  • 举报
回复
我去,这太难看了!建议你检查下几个地方! 1、 List<Dutyplan> list = (List<Dutyplan>)request.getAttribute("list"); 这个list是否为null 2、 if( d.getOndutytime().equals("晚上")&&d.getWeekday()==7) d是否为空, d.getOndutytime()是否为null 3、d.getTeacher().getTeaname()) d.getTeacher()是否为null
八数码问题,多多指教 欢迎大家下载使用参考 1. 概述 1.1 8数码问题 8数码问题是指在3X3的九宫棋盘上有标号为1~8的8个棋牌,和一个空白位,通过棋牌向空白位移动来改变棋盘布局,如何移动棋牌才能从初使布局到达目标布局.显然解答路径实际上就是一个合法的走步序列 1.2 A*算法 A*算法属于一种启发式搜索,它扩展结点的次序类似于广度优先搜索,但不同的是每生成一个子结点需要计算估价函数F,以估算起始结点的约束经过该结点至达目标结点的最佳路径代价;每当扩展结点时,意是在所有待扩展结点中选择具有最小F值的结点做为扩展对象,以便使搜索尽量沿最有希望的方向进行.A*算法只要求产生问题的全部状态空间的部分结点及关系,就可以求解问题了,搜索效率较高。 1.3 A*算法的一般描述 1.3.1约定 S:指示初使状态节点(Note);G:指示搜索图 OPEN:作为存放待扩展节点的表;SNS:子节点集合 CLOSE:作为存放已被扩展节点的表 Move_First(Open):指示取Open表首节点作为当前要被扩展的节点n,同时将节点n移到CLOSE表; F(n) = G(n) + H(n):评价函数,用于排列节点在OPEN表中的位置 1.3.2算法过程 ○1 G:=S; ○2 OPEN := (S), CLOSE := (); ○3 如果OPEN为空则算法失败 ○4 n := Move_First(OPEN); ○5 如果n是目标结点,搜索完成。 ○6 扩展节点n,将非节点n祖先的子节点置于子点子集合SNS中,并插入G,对SNS每个子节点计算F(n,ni)=G(n,ni)+H(ni) ○7 标记与修改指针: 1.把SNS中的子结点分为三类:全新结点,已出现于OPEN表的结点,已出现于CLOSE表的节点;2.加第一类子节点于OPEN表;3.由评价函数值,选择最优结点,并移动子结点指向父节点的指针,改为指向新父节点 ○8 重新排序OPEN表中结点; ○9 返回语句○3 2. A*算法在VC6.0开发环境下的实现 1.类(可参见附件) 1.1 CDisplay类 由于结果以各种棋盘的布局来表示空白位的移动,因此建立这个类的目的是记录棋盘布局,并指出这个布局是否已经存在,是否正解,是否已扩展(已扩展并不表示是正解,正解一定表示已扩展).同时这个类的对象也是搜索树的节点 1.2 CMain类 这个类负责A*算法的全部过程,如:初值与结果的取得,空白位的移动,评价函数值的计算,选择当前最优移动方法,生成下一个棋盘布局,形成搜索树等 1.3 其它类 1.CAI3Doc类:VC6.0 AppWizard自动生成,在本程式中负责将CMain类对象的运算结果(搜索树)转换成可显示格式 2.CAI3View类:VC6.0 AppWizard自动生成,在本程序中负责将CAI3Doc类转换好的内容显示。 3. CMainFrame类:VC6.0AppWizard自动生成,在本程序中负责异常处理(搜索出错,运算成功等) 4.CAI3App类:VC6.0 AppWizard自动生成,本程序中无特殊使用 5.CPtrList类:在本程式中预定义为List,它的对象用于树(搜索树,结果显示树)的存储 6.CPoint类:在本程式中预定义为Position,它的对象用于表示坐标 2.数据结构: 在本程序中,棋盘布局以一个3X3的二元数组表示;CDisplay类的对象作为搜索树的节点,搜索树以链表形式存储(可参见附件) 2. 程序流程图与相关说明: 2.1 生成搜索树 注一: Op1 = Op2表示将Op2的内容全部复制到Op1中, 注二: 标志为解状态的原因是为了找到解图; 标志为某状态为解状态的同时也标记此状态为已扩展 注三:取得空白位的位置在Op2初使化时就已完成。 注四:由于G值对于子结点是相同的,因此只要比较H值就相当于比较了F值 3. 主要程序代码及注释 为节省篇幅,本文不加入源程序代码 请查看CMain.h,CMain.cpp,CDisplay.h,CDisplay.cpp 4. 其它 1.感谢张文亮提供算法(H值的计算)帮助 2.改变程序中MaxItem的设定和相关输入方式(主要指对话框),本程序可以用来计算Maxitem*MaxItem-1数码问题(本程序中MaxItem等于3) 3. 结束语 A*算法在运行过程中,也不可避免的用到了穷举(比如取得空白位的移动方式),但由于评价函数的存在使A*算法能够减少许多类似于穷举的工作。因此它只求解了问题的全部状态空间中的部分状态,提高了效率和减少了用于处理的空间。另外A*算法是AI的基本算法之一。我们也可以这么说:人工智能的精髓就是穷举,人工智能的关键就是控制策略

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧