<%@page pageEncoding="GB18030" %>
<%@page import=" java.sql.*" %>
<%@page import=" java.util.*" %>
<%@page import="java.io.*" %>
<%@page import="com.bjsxt.bbs.*" %>
<%!
    private void tree(Set<Article> articles,Connection conn,int id,int grade){
       String sql = "select * from atticle 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("title"));
              a.setLeaf(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();
       }
    }
%>
<%
  Set<Article> articles = new HashSet<Article>();
  Connection conn = DB.getConn();
  tree(articles,conn,0,0);
  DB.close(conn);
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0051)http://bbs.chinajavaworld.com/forum.jspa -->
<HTML>
<HEAD>
<TITLE>论坛: Java语言*初级版</TITLE>
<META content="text/html; charset=UTF-8" http-equiv=content-type>
<LINK 
rel=stylesheet type=text/css href="images/style.jsp">
<META name=GENERATOR content="MSHTML 8.00.7600.16535">
</HEAD>
<BODY>
<TABLE border=0 cellSpacing=0 cellPadding=0 width="100%">
  <TBODY>
    <TR>
      <TD width="1%"><A href="http://bbs.chinajavaworld.com/index.jspa">&ldquo;&rdquo;<IMG 
      border=0 alt=JAVA中文世界论坛|JAVA开发者论坛 src="images/header-left.gif" 
      width=199 height=38></A></TD>
      <TD width="98%"><IMG border=0 alt="" 
      src="images/header-stretch.gif" width="100%" height=38></TD>
      <TD width="1%"><IMG border=0 alt="" src="images/header-right.gif" 
      width=5 height=38></TD>
    </TR>
  </TBODY>
</TABLE>
<BR>
<BR>
<DIV id=jive-accountbox class=clearfix>
  <DL>
    <DT>欢迎, 游客 </DT>
    <DD><A class=jive-acc-login 
  href="http://bbs.chinajavaworld.com/login!withRedirect.jspa">登录 / 注册</A> </DD>
    <DD><A class=jive-acc-cp 
  href="http://bbs.chinajavaworld.com/guestsettings!default.jspa">游客设置</A> </DD>
  </DL>
</DIV>
<P class=jive-page-title>论坛: Java语言*初级版</P>
<LINK title=RSS 
rel=alternate type=application/rss+xml 
href="http://bbs.chinajavaworld.com/rss/rssmessages.jspa?forumID=20">
<SCRIPT language=JavaScript type=text/javascript 
src="images/common.js"></SCRIPT>
<DIV id=jive-forumpage>
  <DIV class=jive-buttons>
    <TABLE border=0 cellSpacing=0 summary=Buttons cellPadding=0>
      <TBODY>
        <TR>
          <TD class=jive-icon><A 
      href="http://bbs.chinajavaworld.com/post!default.jspa?forumID=20"><IMG 
      border=0 alt=发表新主题 src="images/post-16x16.gif" width=16 
      height=16></A></TD>
          <TD class=jive-icon-label><A id=jive-post-thread 
      href="http://bbs.chinajavaworld.com/post!default.jspa?forumID=20">发表新主题</A></TD>
        </TR>
      </TBODY>
    </TABLE>
  </DIV>
  <BR>
  <INPUT value=last90days type=hidden 
name=dateRange>
  <TABLE border=0 cellSpacing=0 cellPadding=3 width="100%">
    <TBODY>
      <TR vAlign=top>
        <TD><NOBR>帖子: 150,818</NOBR> - <NOBR>主题: 36,509</NOBR> - <SPAN class=nobreak>页数: 1,461 - <SPAN class=jive-paginator>[ <A 
      class=jive-current 
      href="http://bbs.chinajavaworld.com/forum.jspa?forumID=20&amp;start=0&amp;isBest=0">1</A> <A 
      href="http://bbs.chinajavaworld.com/forum.jspa?forumID=20&amp;start=25&amp;isBest=0">2</A> <A 
      href="http://bbs.chinajavaworld.com/forum.jspa?forumID=20&amp;start=50&amp;isBest=0">3</A> <A 
      href="http://bbs.chinajavaworld.com/forum.jspa?forumID=20&amp;start=75&amp;isBest=0">4</A> <A 
      href="http://bbs.chinajavaworld.com/forum.jspa?forumID=20&amp;start=100&amp;isBest=0">5</A> | <A 
      href="http://bbs.chinajavaworld.com/forum.jspa?forumID=20&amp;start=25&amp;isBest=0">下一页</A> ] </SPAN></SPAN></TD>
      </TR>
    </TBODY>
  </TABLE>
  <TABLE border=0 cellSpacing=0 cellPadding=0 width="100%">
    <TBODY>
      <TR vAlign=top>
        <TD width="99%"><DIV class=jive-thread-list>
            <DIV class=jive-table>
              <TABLE cellSpacing=0 summary="List of threads" cellPadding=0 
        width="100%">
                <THEAD>
                  <TR>
                    <TH class=jive-first colSpan=3>主题 </TH>
                    <TH class=jive-author><NOBR>作者 &nbsp; </NOBR></TH>
                    <TH class=jive-view-count><NOBR>查看 &nbsp; </NOBR></TH>
                    <TH class=jive-msg-count noWrap>回复 </TH>
                    <TH class=jive-last noWrap>最新帖子 </TH>
                  </TR>
                </THEAD>
                <%
                   for(Iterator<Article> it=articles.iterator();it.hasNext();){
                   Article a = it.next();
                 %>
                <TBODY>
                  <TR class=jive-even>
                    <TD class=jive-first width="1%" noWrap><DIV class=jive-bullet><IMG border=0 alt=读 
            src="images/read-16x16.gif" width=16 height=16> 
            </div></DIV></TD>
                    <TD width="1%" noWrap>&nbsp; &nbsp; </TD>
                    <TD class=jive-thread-name width="95%">
                    <IMG align=absMiddle src="images/ico_top.gif"> <IMG align=absMiddle src="images/ico_best.gif"> 
                    <A id=jive-thread-1 
            href="http://bbs.chinajavaworld.com/thread.jspa?threadID=693566&amp;tstart=0">自动设置环境变量</A></TD>
                    <TD class=jive-view-count width="1%"noWrap><SPAN><A 
            href="http://bbs.chinajavaworld.com/profile.jspa?userID=28427">57,479</A> </SPAN> </TD>
                    <TD class=jive-msg-count width="1%">458 </TD>
                    <TD class=jive-last width="1%" noWrap><DIV class=jive-last-post>2010-5-3 上午8:08 <BR>
                        最后发表: <A title=0451zhf 
            href="http://bbs.chinajavaworld.com/thread.jspa?messageID=889340#889340">0451zhf 
                        »</A> </DIV></TD>
                  </TR>
                  <TR class=jive-odd>
                    <TD class=jive-first width="1%" noWrap><DIV class=jive-bullet><IMG border=0 alt=读 
            src="images/read-16x16.gif" width=16 height=16> </ 
                        div></DIV></TD>
                    <TD width="1%" noWrap>&nbsp; &nbsp; </TD>
                    <TD class=jive-thread-name width="95%"><IMG align=absMiddle 
            src="images/ico_top.gif"> <A id=jive-thread-2 
            href="http://bbs.chinajavaworld.com/thread.jspa?threadID=733256&amp;tstart=0">[试用政策]请大家向此帖中推荐本版块精华贴</A></TD>
                    <TD class=jive-author width="1%" noWrap><SPAN><A 
            href="http://bbs.chinajavaworld.com/profile.jspa?userID=28627">alan</A> </SPAN></TD>
                    <TD class=jive-view-count width="1%">12,002 </TD>
                    <TD class=jive-msg-count width="1%">37 </TD>
                    <TD class=jive-last width="1%" noWrap><DIV class=jive-last-post>2010-4-13 下午5:43 <BR>
                        最后发表: <A 
            title=qiongyi 
            href="http://bbs.chinajavaworld.com/thread.jspa?messageID=887498#887498">qiongyi 
                        »</A> </DIV></TD>
                  </TR>
                 <%
                         }
                   %>
                </TBODY>
              </TABLE>
            </DIV>
          </DIV></TD>
      </TR>
    </TBODY>
  </TABLE>
</DIV>
<BR>
</BODY>
</HTML>
java.lang.NullPointerException请问这怎么解决啊,哪里出问题啦

解决方案 »

  1.   

    出现以下错误:exception org.apache.jasper.JasperException: java.lang.NullPointerException
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    root cause java.lang.NullPointerException
    com.bjsxt.bbs.DB.createStmt(DB.java:23)
    org.apache.jsp.article_jsp.tree(article_jsp.java:17)
    org.apache.jsp.article_jsp._jspService(article_jsp.java:92)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
      

  2.   

    com.bjsxt.bbs.DB.createStmt(DB.java:23)帖出来,标明23行在哪估计都是conn为null
      

  3.   

    com.bjsxt.bbs.DB.createStmt(DB.java:23)Statement stmt = DB.createStmt(conn);DB是什么啊?createStmt不是静态方法吧。你的DB没实例化吧。
      

  4.   


      tree(articles, conn,a.getId(),grade+1);  这个你都是空的.. 没有获取connection的实例....获取你先定义一下 connection          ----> private Connection conn=null;
      

  5.   

    com.bjsxt.bbs.DB.createStmt(DB.java:23)
     这不提示的很明显了么
      

  6.   


    这是我的DB.java代码package com.bjsxt.bbs;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.sql.ResultSet;
    public class DB {
       public static Connection getConn(){
      Connection conn = null;
      try{
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      conn = DriverManager.getConnection("jdbc:odbc:alan","sa","881205");
      }catch(ClassNotFoundException e){
      e.printStackTrace();
      }catch(SQLException e){
      e.printStackTrace();
      }
      return conn;
       }
       public static Statement createStmt(Connection conn){
       Statement stmt = null;
       try{
       stmt = conn.createStatement();
       }catch(SQLException e){
       e.printStackTrace();
       }
       return stmt;
       }
       public static ResultSet executeQuery(Statement stmt,String sql){
       ResultSet rs = null;
       try{
       rs = stmt.executeQuery(sql);
       }catch(SQLException e){
       e.printStackTrace();
       }
       return rs;
       }
       public static void close(Connection conn){
       if(conn !=null){
       try{
       conn.close();
       }catch(SQLException e){
       e.printStackTrace();
       }
       conn=null;
           }
       }
       public static void close(Statement stmt){
       if(stmt !=null){
       try{
       stmt.close();
       }catch(SQLException e){
       e.printStackTrace();
       }
       stmt=null;
           }
       }
       public static void close(ResultSet rs){
       if(rs !=null){
       try{
       rs.close();
       }catch(SQLException e){
       e.printStackTrace();
       }
       rs=null;
           }
       }
    }
      

  7.   

    private void tree(Set<Article> articles,Connection conn,int id,int grade){
      String sql = "select * from atticle where pid ="+id;
      Statement stmt = DB.createStmt(conn);
      ResultSet rs = DB.executeQuery(stmt,sql);
    你确定你传过来的conn 取到值了吗?
    你直接不用传,改成这个试试:private void tree(Set<Article> articles,int id,int grade){
      Connection conn = DB.getConn();
      String sql = "select * from atticle where pid ="+id;
      Statement stmt = DB.createStmt(conn);
      ResultSet rs = DB.executeQuery(stmt,sql);
      

  8.   


      Connection conn = DB.getConn();
      String sql = "select * from atticle where pid ="+id;
      Statement stmt = DB.createStmt(conn);
      ResultSet rs = DB.executeQuery(stmt,sql);
    这样就行
      

  9.   

    <%
      Set<Article> articles = new HashSet<Article>();
      Connection conn = DB.getConn();
      tree(articles,conn,0,0);
      DB.close(conn);
    %>
    <%!
      private void tree(Set<Article> articles,Connection conn,int id,int grade){
      String sql = "select * from atticle 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("title"));
      a.setLeaf(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();
      }
      }
    %>这样
      

  10.   

    String sql = "select * from atticle where pid ="+id;
    不知是不是atticle写错,应该是article吧?
    lz很有可能是一下两行代码传入的某些参数为null:
    Statement stmt = DB.createStmt(conn);
    ResultSet rs = DB.executeQuery(stmt,sql);
      

  11.   

    还是有问题,下面是错误提示:
    org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 35 in the jsp file: /article.jsp
    The method tree(Set<Article>, int, int) in the type article_jsp is not applicable for the arguments (Set<Article>, Connection, int, int)
    32: <%
    33:   Set<Article> articles = new HashSet<Article>();
    34:   Connection conn = DB.getConn();
    35:   tree(articles,conn,0,0);
    36:   DB.close(conn);
    37: %>
    38: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
      

  12.   

    应该不是atticle那个错误,至于说传了个空值,我想应该是,就是不知道该怎么改,麻烦帮帮忙
      

  13.   

    public static Connection getConn(){
    Connection conn = null;
    try{
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    conn = DriverManager.getConnection("jdbc:odbc:alan","sa","881205");
    }catch(ClassNotFoundException e){
    e.printStackTrace();
    }catch(SQLException e){
    e.printStackTrace();
    }
    return conn;
    }
    把Connection conn = null;这句写到getConn()外面试试private Connection conn;!
      

  14.   

    在DB设几个断点看看
    返回来的connection是不是已经就是一个null
      

  15.   

    LZ是看马士兵JAVA教程做的BBS吧?我今天也遇到同样的问题。。
    找了我1个多钟。。各种看代码。。结果就是看不出哪里不对。
    后面鬼使神差就怀疑是数据库的问题,然后豁然开朗了
    其实结果很简单:昨天我手贱把MySQL的服务启动改成手动了。所以MySQL没开 conn链接不上数据库。。所以报空指针。。代码其实是没问题的。。坑爹 定向思维了~大家一起借鉴吧
      

  16.   

    没开启MySQL服务,所以链接不上数据库 conn为空。
      

  17.   

    LZ是看马士兵JAVA教程做的BBS吧?我今天也遇到同样的问题。。
    找了我1个多钟。。各种看代码。。结果就是看不出哪里不对。
    后面鬼使神差就怀疑是数据库的问题,然后豁然开朗了
    其实结果很简单:昨天我手贱把MySQL的服务启动改成手动了。所以MySQL没开 conn链接不上数据库。。所以报空指针。。代码其实是没问题的。。坑爹 定向思维了~大家一起借鉴吧