2012-6-4 19:32:30 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [KeepWarningServlet] in context with path [/BDPS] threw exception
java.lang.NullPointerException
at com.site.dao.WarningDao.warningList(WarningDao.java:24)
at com.site.servlet.KeepWarningServlet.doGet(KeepWarningServlet.java:61)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:403)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:301)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:162)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:140)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
我的代码:
WarningDao.java
public ArrayList<Warning> warningList(){//返回所有未警告的Warning

DBC dbc=new DBC();
dbc.createCon();
ResultSet result = dbc.executeQuery("select * from tb_warning where isWarning=0");
ArrayList<Warning> arraylist = new ArrayList<Warning>();

try {
while(result.next()){
Warning temp = new Warning();
temp.setSensorName(result.getString("sensorName"));
temp.setSensorNum(result.getInt("sensorNum"));

temp.setDataName(result.getString("dataName"));
temp.setValue(result.getDouble("value"));

temp.setDate(result.getString("date").trim());
temp.setTime(result.getString("time").trim());
arraylist.add(temp);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
dbc.close();
return arraylist;
}问题是:我程序是每10S调用一次该方法,程序运行时前面几十秒能够正常运行,查询数据库正常,运行一段时间后就出现该异常,求解。
我是在servlet中调用的

解决方案 »

  1.   

    空指针异常,错误信息也说了错误的位置。
    估计就是result 为null时产生的错误,前多少秒是正常的,不代表后面也是正常吧?具体逻辑不清楚,也可能result在一个时间时确实为null呢?while(result.next()) 前加个判断:if(result != null){
      while(result.next()) {
         .....
         .....
      }
    }
    不然就debug下看看。
      

  2.   

    java.lang.NullPointerException
    at com.site.dao.WarningDao.warningList(WarningDao.java:24)请问24行是哪行?
    比较怀疑是这两行:
      temp.setDate(result.getString("date").trim());
      temp.setTime(result.getString("time").trim());
    如果result.getString("date")返回是null的话,那么调用其trim()必然就会出空指针错误。
      

  3.   

    ResultSet result = dbc.executeQuery("select * from tb_warning where isWarning=0");
    应该加个''号吧
    ResultSet result = dbc.executeQuery("select * from tb_warning where isWarning='0'");
      

  4.   

    com.site.dao.WarningDao.warningList(WarningDao.java:24)  这个类 24行空指针提示这么清楚!自己学会看报错信息,分析异常解决异常。你可以24行 断点, debug看看 什么为空。
      

  5.   

    问题是:我程序是每10S调用一次该方法,程序运行时前面几十秒能够正常运行,查询数据库正...每次都是取的相同的记录 isWarning=0 这条,首先看这几十秒间数据变动没,没有变动的话,怀疑conn数据库连接没取到。
      

  6.   

    com.site.dao.WarningDao.warningList(WarningDao.java:24)
    at com.site.servlet.KeepWarningServlet.doGet(KeepWarningServlet.java:61)DBC dbc=new DBC();
    dbc.createCon(); //这里估计需要判断一下 ,创建一个连接是否成功,为什么不在DBC用一个连接的静态变量 ,避免每次都创建 ? 而且还有可能创建连接失败 ?
    ResultSet result = dbc.executeQuery("select * from tb_warning where isWarning=0");
    ArrayList<Warning> arraylist = new ArrayList<Warning>();try {
    while((result != null) && result.next()){  //判断是否为空
    Warning temp = new Warning();
    temp.setSensorName(result.getString("sensorName"));
    temp.setSensorNum(result.getInt("sensorNum"));temp.setDataName(result.getString("dataName"));
    temp.setValue(result.getDouble("value"));temp.setDate(result.getString("date").trim());
    temp.setTime(result.getString("time").trim());
    arraylist.add(temp);
    }
    } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    dbc.close();
    return arraylist;
    }
      

  7.   

    fuck u 空指针异常不会处理,点击一下看哪一行 断点在哪里,然后看值是不是空了。