Java 如何在ArrayList上处理NullPointerException

Java 如何在ArrayList上处理NullPointerException,java,arraylist,nullpointerexception,Java,Arraylist,Nullpointerexception,当我选择空Arraylist时,我的代码抛出了一个NullPointerException 这是堆栈跟踪: javax.el.ELException: /jsf/projet/phases/viewPhases.xhtml @27,170 value="#{PhaseComponent.listPhaseTaches(PhaseComponent.phase.idphase)}": java.lang.NullPointerException at com.sun.faces.facel

当我选择空Arraylist时,我的代码抛出了一个
NullPointerException
这是堆栈跟踪:

javax.el.ELException: /jsf/projet/phases/viewPhases.xhtml @27,170 value="#{PhaseComponent.listPhaseTaches(PhaseComponent.phase.idphase)}": java.lang.NullPointerException
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
    at javax.faces.component.UIData.getValue(UIData.java:554)
    at org.primefaces.component.datatable.DataTable.getValue(DataTable.java:910)
    at org.primefaces.component.api.UIData.getDataModel(UIData.java:615)
    at javax.faces.component.UIData.getRowCount(UIData.java:339)
    at org.primefaces.component.api.UIData.calculateFirst(UIData.java:161)
    at org.primefaces.component.datatable.DataTableRenderer.preEncode(DataTableRenderer.java:107)
    at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:81)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:74)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:57)
    at org.primefaces.component.panel.PanelRenderer.encodeContent(PanelRenderer.java:204)
    at org.primefaces.component.panel.PanelRenderer.encodeMarkup(PanelRenderer.java:121)
    at org.primefaces.component.panel.PanelRenderer.encodeEnd(PanelRenderer.java:58)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1650)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:164)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:70)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:57)
    at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:879)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1650)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:389)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
    at com.gestion.projet.web.jsf.PhaseComponentImpl.listPhaseTaches(PhaseComponentImpl.java:268)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy56.listPhaseTaches(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy9.listPhaseTaches(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:183)
    at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:161)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:111)
    at com.sun.el.parser.AstValue.getValue(AstValue.java:163)
    at com.sun.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:219)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:106)
    ... 56 more
这是我要处理异常的方法,它返回ArrayList:

public List<Tache> listPhaseTaches(Integer idphaseKey) {

  return new java.util.ArrayList<Tache>(phaseDAO.findPhaseByPrimaryKey(idphaseKey).getTaches());

    }
公共列表listPhaseTaches(整数idphaseKey){
返回新的java.util.ArrayList(phaseDAO.findPhaseByPrimaryKey(idphaseKey.getTaches());
}

问题是,对于返回Arraylist的方法,我不知道应该如何处理
NullPointerException
,您可以这样处理

List list = someMethod();

if(list!=null){
//your logic
}
else{
}

您的错误位于
phaseDAO
为null或
phaseDAO.findPhaseByPrimaryKey(idphaseKey)
这将返回null或
phaseDAO.findPhaseByPrimaryKey(idphaseKey).getaches()这将返回null

使用此>>

    public List<Tache> listPhaseTaches(Integer idphaseKey) {

    if(phaseDAO!=null){
       if(phaseDAO.findPhaseByPrimaryKey(idphaseKey)!=null){
              if(phaseDAO.findPhaseByPrimaryKey(idphaseKey)!=null){
                   return new ArrayList(phaseDAO.findPhaseByPrimaryKey(idphaseKey));
               }
      }
    }
    return null;
  }
公共列表listPhaseTaches(整数idphaseKey){
如果(相位DAO!=null){
如果(phaseDAO.findPhaseByPrimaryKey(idphaseKey)!=null){
如果(phaseDAO.findPhaseByPrimaryKey(idphaseKey)!=null){
返回新的ArrayList(phaseDAO.findPhaseByPrimaryKey(idphaseKey));
}
}
}
返回null;
}
List List=someMethod();
如果(列表!=null){
//你的逻辑
}
否则{
返回新列表();
}

确保返回非空值

并提供以下空检查:

    phaseDAO != null
    phaseDAO.findPhaseByPrimaryKey(idphaseKey) != null 
    phaseDAO.findPhaseByPrimaryKey(idphaseKey).getTaches() != null 

我猜:findPhaseByPrimaryKey(idphaseKey)是返回null的内容,您正在对其调用一个方法。我不知道我在其他内容中添加了什么。如果不需要其他内容,您可能会忽略,只有在列表不为null时才需要proceed@AM另一种方法是只输出一些文本,说明发生了错误,然后终止。您在
中的其他操作取决于具体情况。您需要对此进行求值。@DonyRom问题是该方法仍然返回arraylistphaseDao。findPhaseByPrimaryKey(idphaseKey)不返回null,但当我添加phaseDao时。findPhaseByPrimaryKey(idphaseKey)。getTaches()返回null,因为此列表没有任何记录
    phaseDAO != null
    phaseDAO.findPhaseByPrimaryKey(idphaseKey) != null 
    phaseDAO.findPhaseByPrimaryKey(idphaseKey).getTaches() != null