public  synchronized void sessionDestroyed(HttpSessionEvent arg0) { //synchronized处理线程同步,当同一个时候几个用户同时来访问是,同样可以记录所有信息
session = arg0.getSession();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String leavetime = sdf.format(new Date()); UserModel us = (UserModel) session.getAttribute("userModel");
SupervisionLogin su = new SupervisionLogin(); System.out.println(us.getName() + ":已离开");
int userid = Integer.parseInt(us.getUserID());
su.setUserid(userid);
su.setLeavetime(leavetime);
su.setCreattime(us.getCreateTime());
su.update();
System.out.println("离开时间:" + leavetime);
}我写了一个 注销时候记录注销时间的 JVAV 类  在点击注销按钮的时候 调用 session.invalidate()
能记录离开时间 和 离开的SESSION 的一些信息 就是莫名奇妙有时候会报一个空指针错误
不影响记录的结果 但是, 为什么会出现这样的情况呢?是那个对象没实例化吗 ?在线等高手给个答案  谢谢了!
错误:
严重: Session event listener threw exception
java.lang.NullPointerException
at com.oaking.erp.supervision.Session.sessionDestroyed(Session.java:34)
at org.apache.catalina.session.StandardSession.expire(StandardSession.java:675)
at org.apache.catalina.session.StandardSession.expire(StandardSession.java:633)
at org.apache.catalina.session.StandardSession.invalidate(StandardSession.java:1072)
at org.apache.catalina.session.StandardSessionFacade.invalidate(StandardSessionFacade.java:149)
at org.apache.jsp.erp.supervision.saveonline_jsp._jspService(org.apache.jsp.erp.supervision.saveonline_jsp:61)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
在线等 

解决方案 »

  1.   

    这个public  synchronized void sessionDestroyed(HttpSessionEvent arg0) 方法会被调用吗?
      

  2.   

    会啊  执行session.invalidate() 
    就会被调用session 过期也会被调用楼上的什么意思?我不明白
      

  3.   

    at com.oaking.erp.supervision.Session.sessionDestroyed(Session.java:34) 
    这个34行是哪一行,打印一下那个变量。
    检查一下,哪个地方没有初始化
      

  4.   

    会不会是session超时呢?
    把行数贴出来看看。
      

  5.   

    你看看得到的
    session = arg0.getSession(); 
    是否为空
      

  6.   

    public  synchronized void sessionDestroyed(HttpSessionEvent arg0) 
    调用这个方法时session已经失效了吧
    既然session失效了,从session中取变量当然是null
      

  7.   

    public  synchronized void sessionDestroyed(HttpSessionEvent arg0) 
    调用这个方法时session已经失效了吧
    既然session失效了,从session中取变量当然是null
      

  8.   

    好长时间不写WEB页面了,session值没有传过来,过期了。
      

  9.   

    应该是 session 失效了,而你的程序还停留在 获取session数值的页面,你没有判断 当session为空的时候 跳转 所以 在session失效的时候 在去调用 session的数值 就会报那样的错误
      

  10.   

    不影响记录的结果??System.out.println("离开时间:" + leavetime); 
    的后面还有代码没,贴全点
      

  11.   

    session过期,会超时也会调用着个的.
    你这是session 过期了, 你在调用session.invalidate,就出错了,
    你写代码你得要让代码流畅,健壮啊.
    public  synchronized void sessionDestroyed(HttpSessionEvent arg0) { //synchronized处理线程同步,当同一个时候几个用户同时来访问是,同样可以记录所有信息 
    if (arg0 == null)return;
    session = arg0.getSession(); 
    if(session == null)return;
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
    String leavetime = sdf.format(new Date()); UserModel us = (UserModel) session.getAttribute("userModel"); 
    SupervisionLogin su = new SupervisionLogin(); System.out.println(us.getName() + ":已离开"); 
    int userid = Integer.parseInt(us.getUserID()); 
    su.setUserid(userid); 
    su.setLeavetime(leavetime); 
    su.setCreattime(us.getCreateTime()); 
    su.update(); 
    System.out.println("离开时间:" + leavetime);