在for中的变量内的空指针访问

时间:2014-09-22 13:29:52

标签: java nullpointerexception null

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

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

但我不知道为什么,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);

提前谢谢。

2 个答案:

答案 0 :(得分:1)

虽然它是全球性的,但它从未被初始化。您无法添加到null列表。因此,将列表初始化为:

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

而不是

List<Object> InformeSalvaguardasAGR = null;

答案 1 :(得分: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>();