错误信息如下:
2010-8-8 11:32:34 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at com.taiyang.mchcs.web.reporthc.ydbb.MonthFolicacidReportController.sumDate(MonthFolicacidReportController.java:353)
at com.taiyang.mchcs.web.reporthc.ydbb.MonthFolicacidReportController.excel(MonthFolicacidReportController.java:295)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:421)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:136)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:326)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:313)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.taiyang.mchcs.security.SecurityEnforcementFilter.doFilterInternal(SecurityEnforcementFilter.java:59)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.taiyang.common.filter.OpenContextInTierFilter.doFilterInternal(OpenContextInTierFilter.java:43)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:619)方法如下:public List<MonthFolicacidReport> sumDate(List<MonthFolicacidReport> lister ){
         List <MonthFolicacidReport>  lister2= lister;
       String months[] {"01","02","03","jd1","04","05","06","jd2","07","08","09","jd3","10","11","12","jd4","year"};
int sum=0;
BigDecimal b = new BigDecimal(sum);
 if("1".equals(usertype)){
MonthFolicacidReport mfr1 = new MonthFolicacidReport();
MonthFolicacidReport mfr2 = new MonthFolicacidReport();
MonthFolicacidReport mfr3 = new MonthFolicacidReport();
MonthFolicacidReport mfr4 = new MonthFolicacidReport();
MonthFolicacidReport mfr5 = new MonthFolicacidReport();
if(null!=lister && lister.size()>0){
lister.clear();
for(int i=0;i<17;i++){
MonthFolicacidReport mfr = new MonthFolicacidReport();
mfr.setXhfh(b);
mfr.setZyfh(b);
mfr.setHjff(b);
mfr.setBydxz(b);
mfr.setWfrs(b);
mfr.setFcrs(b);
mfr.setGffyrs(b);
mfr.setdYearMonth(months[i]);
lister.add(i,mfr);
}
if(lister2.size()<17){
for( int j=0;j<lister2.size();j++){
for(int k=0;k<months.length; k++){
if(lister2.get(j).getdYearMonth().lastIndexOf(months[k])>-1){

lister.set(k, lister2.get(j));
}
}
}
}
for(int i=0; i<lister.size(); i++){
//计算一季度
if(lister.get(i).getdYearMonth().equals("01")||lister.get(i).getdYearMonth().equals("02")||lister.get(i).getdYearMonth().equals("03")){

mfr1.setXhfh(null==mfr1.getXhfh()||"".equals(mfr1.getXhfh())?b.add(lister.get(i).getXhfh()):mfr1.getXhfh().add(lister.get(i).getXhfh()));
mfr1.setZyfh(null==mfr1.getZyfh()||"".equals(mfr1.getZyfh())?b.add(lister.get(i).getZyfh()):mfr1.getZyfh().add(lister.get(i).getZyfh()));
mfr1.setHjff(null==mfr1.getHjff()||"".equals(mfr1.getHjff())?b.add(lister.get(i).getHjff()):mfr1.getHjff().add(lister.get(i).getHjff()));
mfr1.setBydxz(null==mfr1.getBydxz()||"".equals(mfr1.getBydxz())?b.add(lister.get(i).getBydxz()):mfr1.getBydxz().add(lister.get(i).getBydxz()));
mfr1.setWfrs(null==mfr1.getWfrs()||"".equals(mfr1.getWfrs())?b.add(lister.get(i).getWfrs()):mfr1.getWfrs().add(lister.get(i).getWfrs()));
mfr1.setFcrs(null==mfr1.getFcrs()||"".equals(mfr1.getFcrs())?b.add(lister.get(i).getFcrs()):mfr1.getFcrs().add(lister.get(i).getFcrs()));
mfr1.setGffyrs(null==mfr1.getGffyrs()||"".equals(mfr1.getGffyrs())?b.add(lister.get(i).getGffyrs()):mfr1.getGffyrs().add(lister.get(i).getGffyrs()));
lister.set(3, mfr1);
}
}
错误信息提示就是if(lister.get(i).getdYearMonth().equals("01")||lister.get(i).getdYearMonth().equals("02")||lister.get(i).getdYearMonth().equals("03"))这里为空。但是我这里肯定不为空。请问大侠们这里的错误应该是什么造成的;

解决方案 »

  1.   

    在你肯定不为空之前先把:
    lister.get(i)打印出来看看。
    再把lister.get(i).getdYearMonth()打印出来看看。
    或者直接debug吧。
      

  2.   

    NullPointerException 一般是由不好的编程习惯造成的。要坚信 all input is evil,对于 public 方法,所有的传入的参数都必须经过非空检查,对于从其他接口调用返回的对象,比如:数据库、网络、服务等,也必须经过非空检查。
      

  3.   

    谢谢大家了!
    我已经把问题解决了! 解决办法:直接把if(lister.get(i).getdYearMonth().equals("01"))比较成
    if("01".equals(lister.get(i).getdYearMonth()))