2009-04-09 19 views
13

El siguiente código me está dando un NullPointerException. El problema está en la línea siguiente:NullPointerException mientras se utiliza el método de poner HashMap

... 
dataMap.put(nextLine[0], nextLine[6]); 

Lo que es extraño es que he ejecutar este código sin la línea anterior y la llamada a nextLine[0] y nextLine[6] trabajo exactamente como se esperaba - es decir que me dan vuelta elementos de una archivo csv. Declaro e inicializar HashMap con el código

HashMap<String, String> dataMap = null; 

anteriormente en el método

String[] nextLine; 
    int counter=0; 
    while (counter<40) { 
    counter++; 

    System.out.println(counter); 
    nextLine = reader.readNext(); 
    // nextLine[] is an array of values from the line 
    System.out.println(nextLine[0] + " - " + nextLine[6] +" - " + "etc..."); 
    dataMap.put(nextLine[0], nextLine[6]); 
    } 
    return dataMap; 
} 

Respuesta

26
HashMap<String, String> dataMap = new HashMap<String,String>(); 

Su dataMap variable no se inicializa en este punto. Debería recibir una advertencia del compilador sobre eso.

+0

¿No es realmente el problema que está * explícitamente * inicializado? Para nulo? –

+0

Creo que Codingscape significa decir "no está instanciado" –

+0

En realidad, hay una pista aquí. No recibió una advertencia porque lo inicializó para anular la advertencia del compilador que seguramente estaba recibiendo. Debe hacer que sea un hábito NO inicializar las variables a un valor "Neutral" de manera predeterminada, solo establecerlas en su valor real para que el compilador pueda advertir. –

5

Cuando se inicializa mapa de datos? Siempre es nulo.

Para aclarar, que declara la variable y la pusieron en nulo. Pero necesita crear una instancia de un nuevo mapa, ya sea un HashMap o similar.

p. Ej.

datamap = new HashMap(); 

(dejando de lado los genéricos etc.)

+0

Sí, es muy extraño que eliminar un puntero que es explícitamente nulo arrojaría una NullPointerException. – Apocalisp

3

Datamap está declarada pero no inicializada. Puede ser inicializado con

Datamap = new HashMap();

1

Bueno, hay tres objetos que se accede en esa línea. Si nextLine [0] y nextLine [6] no son nulas, porque la llamada println anterior funcionó, entonces eso deja dataMap. Hiciste dataMap = new HashMap(); somwehere?

0

Um, ¿qué es exactamente hacer se puede esperar cuando se hace esto?

HashMap<String, String> dataMap = null; 
... 
dataMap.put(...) 
+2

que estaba esperando que nula es una especie de marcador de posición, pero cuando se utiliza, pero que sean el valor "put" hacer el HashMap ya no igual a null – Ankur

+0

Si = null poner todas partes lo hará mi programa de escritura en sí? –

Cuestiones relacionadas