【问题标题】:Null pointer access in variable inside a forfor内变量中的空指针访问
【发布时间】:2014-09-22 13:29:52
【问题描述】:

在标有 $ 的行中显示以下消息:

此行有多个标记 - 空指针访问:此时变量 InformeSalvaguardasAGR 只能为空 地点 - 空指针访问:此时变量 InformeSalvaguardasAGR 只能为空 位置

但我不知道为什么,InformeAmenazasAGR 是一个优越的变量,他们可以访问。为什么显示此消息以及如何正确显示?

            List<Object> InformeAmenazasAGR = null;
            List<Object> InformeSalvaguardasAGR = null;
            try {
                Locale locale = (Locale)request.getSession().getAttribute(Globals.LOCALE_KEY);
                if (locale == null){
                    locale = Locale.getDefault();
                }
                ResourceBundle recursos = ResourceBundle.getBundle(ProcopGlobals.FICHERO_MULTILENGUAJE,locale);
                manager = new AGRInformesManager();

                // EXTRAER TODAS LAS AMENAZAS.          
                InformeAmenazasAGR = manager.preparaInformeRiesgoActivos(idDimension, tipoActivo, idActivo, tipoActivoTexto, nombreActivo, recursos);

                for (int i = 0; i < InformeAmenazasAGR.size()-1; i++) {
                    String Amenaza = InformeAmenazasAGR.get(i).toString();
                    Amenaza = Amenaza.substring(1,3);
                    Object resultadoQuery = manager.SalvaguardaPorAmenaza(Amenaza);
                    if(resultadoQuery!= null){
    $                   InformeSalvaguardasAGR.add(resultadoQuery);
                    } else {

                    }                           
                }
                if (InformeSalvaguardasAGR != null) {
                    //Prueba
                    String informetexto =InformeSalvaguardasAGR.toString();
                }

            } catch( Exception e ) {
                log.error( "No fue posible generar el informe AGR para el Tipo: "+tipoActivo+" Activo: "+idActivo+" en Dimension: "+idDimension+".EX:" + e.toString());
                e.printStackTrace();
            } finally {
                if( manager != null ) {
                    try {
                        manager.closeDAO();
                    } catch( Exception e ) {
                        e.printStackTrace();
                }
                manager = null;
            }
        }
    JSONArray JSonArray = new JSONArray();
    JSonArray.put(InformeSalvaguardasAGR);
    String InformeSalvasAGR = JSonArray.toString();
    InformeSalvasAGR = InformeSalvasAGR.substring(1, InformeSalvasAGR.length()-1);

    request.setAttribute("InformeAmenazasAGR", InformeSalvasAGR);

提前谢谢你。

【问题讨论】:

  • 你在哪里初始化它们?InformeSalvaguardasAGR,它只是你必须提供一些实现的接口
  • 你的列表初始化为空:List&lt;Object&gt; InformeSalvaguardasAGR = null; 将此行替换为List&lt;Object&gt; InformeSalvaguardasAGR = new ArrayList&lt;Object&gt;();
  • 谢谢@StephaneM,我没有看到我的错误。

标签: java nullpointerexception null


【解决方案1】:

如果在 try-catch-finally 块中发生某些事情,InformeSalvaguardasAGRInformeAmenazasAGR 都不会被初始化并保持为 null。将来,如果他们是null,您可以让NPE 尝试调用他们的方法。我建议你更换这个:

List<Object> InformeAmenazasAGR = null;
List<Object> InformeSalvaguardasAGR = null;

用这个:

List<Object> InformeAmenazasAGR = new ArrayList<Object>();
List<Object> InformeSalvaguardasAGR = new ArrayList<Object>();

【讨论】:

    【解决方案2】:

    虽然它是全局的,但它永远不会被初始化。您不能添加到为空的列表中。所以将列表初始化为:

    List<Object> InformeSalvaguardasAGR = new ArrayList<Object>();
    

    而不是

    List<Object> InformeSalvaguardasAGR = null;
    

    【讨论】:

      猜你喜欢
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多