出错信息,这种情况的出现是我在浏览器上按F5键50多秒来重复刷新出现的,错误如下;
java.lang.NullPointerException

解决方案 »

  1.   

    检查代码 应该是ArrayList里边为null 才这样
      

  2.   

    hcqhappy(月坏) 说的对!<%!purview pru = new purview();
    ArrayList alYN;
    int no;//栏目标识
    int YN7 = 0;//删除权限
    String QX_a = "";//根据userid,user_lm传出本栏目权限
    %>
    中的ArrayList alYN需要初始化一下,改为:ArrayList alYN = new ArrayList();
      

  3.   

    我觉得你的代码很怪,purview.java中的成员函数还要创建引用自己类的实例。没有看到所有代码,至少觉得这里有点问题:
    purview pru = new purview();
    放到了循环中。如下面的代码:purview.java(再次我只写其中的一个方法)
    public ArrayList getAllLM(int userid)
    {
    String sql = "select user_lm from rwm where userid = "+userid+"";

    ArrayList al = null;
    purview pru = new purview();
    try{
    RS= Stmt.executeQuery(sql);
    while(RS.next())
    {
    pru = new purview();
    pru.setLmTag(RS.getInt("user_lm"));
    pru.setLmName(pru.getLMname(RS.getInt("user_lm")));
    al.add(pru);
    }
    }catch(SQLException e)
    {
    System.out.print(e.getMessage());
    }
    return al;
    }
      

  4.   

    为什么在一开始时没有出现错误,要连续刷新很多次才会出现呢,
    楼上的我在javabean里ArrayList已经用ArrayList al = new ArrayList();声明了阿,应当在用jsp调用时,就算里面没有任何值,也应当不会有问题的八
      

  5.   

    这种声明是不对的:
    <%!purview pru = new purview();
    ArrayList alYN;
    int no;//栏目标识
    int YN7 = 0;//删除权限
    String QX_a = "";//根据userid,user_lm传出本栏目权限
    %>
    这样声明相当于在servlet的doGet(),doPost()外面写东西,
    对一个servlet来说(准确的说是一个url,servlet可以做多种映射的url)只有一个实例,所以你的:ArrayList有时可能是空的,
    在jsp里除非必要,不要用<%! %>来声明变量,(如果做计数器这种功能的可以,其它的时候不要用)
      

  6.   

    那就要看你调用什么方法了,如果你调用:al.get(1),为空肯定出错了!用:if(list.isEmpty())判断一下再做可能容易抛错的执行!
      

  7.   

    代码级问题。么考虑到可能出现的异常。
    应该看具体哪一行出现的问题?加上try...catch...再try
      

  8.   

    异常肯定在pru.getAllLM()的执行过程中,遇到了问题。
      

  9.   

    下面的代码抛出的异常,我已经测试过,关键如何解决
    alYN = pru.getAllLM(Integer.parseInt(cnlife_user_userid));
      

  10.   

    在jsp的<%! %>部分,所有声明的变量应该是只读的,也就是应该声明为final,并且对ArrayList这样的对象不要进行任何写操作(如add,remove等等),否则在执行过程中一定会出问题(这种错误还通常很少出现),因为通常的servlet是多线程执行的,<%! %>部分的代码是在doGet和doPost方法之外的,当多个用户同时执行时,就会产生干扰。
    在此部分可以声明方法,但不要对<%! %>部分声明的变量进行任何写操作
      

  11.   

    关联到的问题很多,有可能是数据库连接等等。
    加入调试信息,你慢慢调.
    public ArrayList getAllLM(int userid)
    {
                      //System.out.println("start");
    String sql = "select user_lm from rwm where userid = "+userid+"";
    //System.out.println(1);
    ArrayList al = null;
    purview pru = new purview();
    //System.out.println(2);
    try{
    RS= Stmt.executeQuery(sql);
    //System.out.println(3); while(RS.next())
    {
    pru = new purview();
    pru.setLmTag(RS.getInt("user_lm"));
    pru.setLmName(pru.getLMname(RS.getInt("user_lm")));
    al.add(pru);
    }
    //System.out.println(4); }catch(SQLException e)
    {
    System.out.print(e.getMessage());
    }
                      catch(Exception ex)
                      {
    System.out.println("HAHA:"+ex.toString());
                      }
                      System.out.println("End");
    return al;
    }
      

  12.   

    <%!
    purview pru = new purview();
    ArrayList alYN;
    int no;//栏目标识
    int YN7 = 0;//删除权限
    String QX_a = "";//根据userid,user_lm传出本栏目权限
    %>
    这段代码错了,线程不安全。你的jsp被引擎编译成servlet后这段代码相当于servlet的公共变量。
    每次请求jsp时调用的其实就是那个servlet,所以你那ArrayList还是第一次的。
    记住servlet是多线程的,你的jsp最好别用<%! %>声明变量,把!号去掉吧。
    你可以参照一下2次编译出的servlet就知道有什么不同了
      

  13.   

    我原来没有用<%!%>这种形式声明变量,刷新一会就会抛出异常