final int pageSize = 10;//每页显示的帖子数 
把final去掉,你指定他要10条,但它没10条,当然NullPointException啦!
而且一般都会有自己指定一页几条的功能的,不要加final

解决方案 »

  1.   

    你大于等于10条它不报错是因为他一页就显示10条,所以大于等于10的它都符合你的  final int pageSize = 10;但少了就不行!
      

  2.   

     同意樓上的說法空指針異常其實是很低級的BUG,自己找原因時往往想太過于復雜。
      

  3.   

    呵呵,
    他们都说了,
    这里我们设计的时候同样都是的,你不用指定pageSize的,其实你用到这个变量的时候,在程序的那个地方直接指定pageSize=10,就可以了,你想,如果你没有10,但是你又指定是10,所以会出现错误了,一般不外乎pageSize,pageStart,totalRow,在几个之间操作了,不要指定固定,
      

  4.   

       1楼说的不对,我试过了,这里的final根本不会影响结果,改成 int pageSize = 10也是一样的 报异常。
    因为去掉final,那条sql语句也照样还是一样的。可能是我没把问题陈述清楚把。其实我的疑惑是:假如现在我数据库topic表中只有5条记录,而我要求的分页还是10条每页。我试过在数据库中执行:select * from topic order by time desc limit 0,10其结果是5条记录。这样的话照理说,我的这条语句执行后(ResultSet rs = DB.getRs(stmt, sql) ),rs中的也应该只有5条记录才对,可此时的rs却是空值,一条记录都没有了。
     还有个奇怪的现象,假如我有15条记录,分页的照样是每页10条,我把startPos = 0 改为 startPos = (pageNo(指当前页码)-1)* pageSize 在显示第二页时却不会因为帖子数不足而报异常,为什么会这样呢?有人说把这句 final int pageSize = 10 去掉,这样确实不会报异常了,但这样我怎么能分页显示呢?考虑到效率问题。所以我分页不是把记录全取出来在分,而是在取数据时就分页。
    我想我肯定是哪个地方想错了,拜托各种大虾帮忙找找了。
      

  5.   

    while(rs.next()) // 说明 rs==null
    ResultSet rs = DB.getRs(stmt, sql); 说明返回的是空值。
    最好看看你的getRS,和getStmt(conn);
      

  6.   

    String sql = "select * from topic order by time desc limit " + startPos + "," + pageSize;把startPos和pageSize都替换成手打的数字,语句变成String sql ="select * from topic order by time desc limit 0,10";再执行看看是否还是空指针,如果是的话的确就不是变量的原因了.貌似我分页用到现在没出现过这种问题....
      

  7.   

    从原理上讲,如果记录的数目不够10,那就有多少就取多少,不够10也不会报NullPointerExcepiton的(这个可以直接在数据库中试验的),最好检测一下别的地方。
      

  8.   

    你用MyEclipse的DEBUG一步步检测一下,看为什么没有查出来。你还可以试试把你这个SQL语句直接放在数据库中查,看可不可以查到。
      

  9.   

    我也出现了这种错误,经过一步步的排除发现是startPos是负值导致的,你在查询前打印你的SQL语句看看,我的是这问题,
    在数据库里会报错,但是到jdbc里就是空指针错不打印数据库里的查询语句错误。