java.lang.NullPointerException 怎么解决?

请看代码:
<%!
private void tree(List<Article> articles,Connection conn,int id,int grade) {
String sql = "select * from article where pid = "+id;
Statement stmt = DB.createstmt(conn);
ResultSet rs = DB.executeQuery(stmt,sql);
try{
while(rs.next()){
Article a = new Article();
a.setId(rs.getInt("id"));
a.setPid(rs.getInt("pid"));
a.setRootid(rs.getInt("rootid"));
a.setTitle(rs.getString("rootid"));
a.setIsleaf(rs.getInt("isleaf") == 0?true:false);
a.setPdate(rs.getTimestamp("pdate"));
a.setGrade(grade);
articles.add(a);
if(!a.isleaf()){
tree(articles,conn,a.getId(),grade+1);
}
}
}catch(SQLException e){
e.printStackTrace();
}
}
%>

<%
List<Article> articles = new ArrayList<Article>();
Connection conn = DB.getConn();
tree(articles,conn,0,0);
DB.close(conn);
%>
、、、、、。。。。
exception

org.apache.jasper.JasperException: Exception in JSP: /article.jsp:9

6: Statement stmt = DB.createstmt(conn);
7: ResultSet rs = DB.executeQuery(stmt,sql);
8: try{
9: while(rs.next()){
10: Article a = new Article();
11: a.setId(rs.getInt("id"));
12: a.setPid(rs.getInt("pid"));

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

root cause

java.lang.NullPointerException
org.apache.jsp.article_jsp.tree(article_jsp.java:20)
org.apache.jsp.article_jsp._jspService(article_jsp.java:78)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.25 logs.

空指针异常,比如当rs返回null值的时候,你再调用他的方法就会报空指针异常。

另外你还在用MVC1模式写项目,还是尽快用struts+hibernate 构建吧,你会发现效率的提升,如同从老牛拉车过渡到磁悬浮列车。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-03-30
rs 为空 执行SQL语句的时候返回的是一个空的 ResultSet
具体咋空就要看程序了。。
第2个回答  2022-12-02

首先找到发生异常的那行,然后寻找逐步向上找源头。如果没有必要查找源头,可以直接绕过它。譬如:

1,List<String>books=BooKDAO.findAll();
2,intsize=books.size();


如果第2行发生空指针异常了,知道books肯定为null了,这时查找BookDAO.的findAll方法,如果findAll()方法又调用了其他的方法,可以继续查下去。如果没有业务需要,可以直接写成:

List<String>books=BooKDAO.findAll();
intsize=0;
if(books!=null){
size=books.size();
}

或者

List<String>books=BooKDAO.findAll();
intsize=0;
try{
size=books.size();
}catch(NullpointerException){
size=0;或者不写或者打印错误
}

/iknow-pic.cdn.bcebos.com/8694a4c27d1ed21b27f786aba06eddc451da3f45"target="_blank"title="点击查看大图"class="ikqb_img_alink">/iknow-pic.cdn.bcebos.com/8694a4c27d1ed21b27f786aba06eddc451da3f45?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc="https://iknow-pic.cdn.bcebos.com/8694a4c27d1ed21b27f786aba06eddc451da3f45"/>

扩展资料

最重要的类是Object(它是类层次结构的根)和Class(它的实例表示正在运行的应用程序中的类)。把基本类型的值当成一个对象来表示通常很有必要。包装器类Boolean、Character、Integer、Long、Float和Double就是用于这个目的。

类Math提供了常用的数学函数,比如正弦、余弦和平方根。类似地,类String和StringBuffer提供了常用的字符串操作。

类ClassLoader、Process、Runtime、SecurityManager和System提供了管理类的动态加载、外部进程创建、主机环境查询(比如时间)和安全策略实施等“系统操作”。

类Throwable包含了可能由throw语句抛出的对象(§14.16)。Throwable的子类表示错误和异常。

参考资料:/baike.baidu.com/item/java.lang/5179788"target="_blank"title="java.lang-百度百科">java.lang-百度百科

相似回答