2011-12-06 13 views
26

Estoy bastante confundido es un problema de Android o problema de Java en sí mismo.Java: La excepción en sí es nula

Cuando estaba depurando una aplicación de Android que funciona con Bluetooth, el flujo se detuvo en un bloque catch de IOException en el que más tarde descubrí que la excepción e era nula .... Se lanzó cuando estaba tratando de leer desde un InputStream

Sí, no era un NullPointerException pero otro tipo de excepción que es nula- Mejor decir lanzado sin inicializar.

¿Es posible? ¿En qué escenario pueden lanzarse tales excepciones unitarias?

An exception is null.... ITS NOT A NULL POINTER EXCEPTION

+6

'throw null;'? – Dimme

+0

Pls. agregue la excepción de lanzamiento de muestra de código. – Azodious

+0

es solo una llamada BluetoothInputStream.read() con el dispositivo ya conectado ... Pero estoy tratando de poner una instantánea como prueba si alguien está interesado ...... – Prasham

Respuesta

-2

En Java, se puede tirar un NullPointerException lanzando null. En este caso, el lanzamiento será en última instancia un NullPointerException.

public static void main(String[] args) 
    { 
     try{ 
      a(null); 
     } 
     catch(Exception e) 
     { 
      System.out.println(e); 
      e.printStackTrace(); 
     } 
    } 
    public static void a(String[] args) 
    { 
     throw null; 
    } 

Salida:

java.lang.NullPointerException 
java.lang.NullPointerException 
at scjp.Scjp.a(Scjp.java:18)  
at scjp.Scjp.main(Scjp.java:8) 
+1

Ver la captura de pantalla que he publicado ..... Creo que ahora tiene que cambiar la respuesta después de verlo ..... :) – Prasham

+0

El error que obtuvo no es nullpointerexception, pero la excepción en sí es nula –

0

Usted probablemente está siendo engañado por el depurador.

Agregue otra línea de código debajo de esa línea (algo inútil como if(false) log.v("","");), corte allí y verifique desde allí el valor de su excepción.

Pruebe también Log.e(TAG, "my null exception", e); y lea el registro.

+0

Lo mismo, unfotunately – Prasham

+0

Log debe imprimir algo sobre ese objeto arrojado, pero probablemente el que se puede arrojar es nulo ... no imprime nada más que "Mi excepción nula" – Prasham

+0

"Ser engañado por su depurador" no se limita necesariamente a la tergiversación: el depurador podría dañar el flujo del programa o estado y no simplemente informe incorrectamente. –

-1

no estoy seguro si es el mismo problema, pero yo ya he respondido a una pregunta similar ... Si sucede cuando intenta leer desde un InputStream continuación, echar un vistazo a este enlace ...

Android Bluetooth connection issue

+0

¡¡Ningún amigo !! no es el mismo problema, en realidad no quiero deshacerme de este problema, solo tenía curiosidad sobre el tema, especialmente su razón ... – Prasham

+1

Ahhh ok! Entonces, si solo se trata de entender cómo se maneja la excepción ... Lanzar null como excepción (Exception es un objeto) es posible en java ... http://www.adarshr.com/papers/npe – Swordfish90

14

¿es posible? ¿En qué escenario pueden lanzarse tales excepciones unitarias?

Esto no es posible utilizando un compilador conforme a Java y una máquina virtual Java conforme, y por extensión una máquina virtual Davlik conforme. El JLS no permite la variable e sea null en ese lugar

O usted tiene una máquina con errores virtual, un depurador de errores, o un problema con el IDE, herramientas de construcción y/o proceso.

Si estuviera en su situación, DEJARÍA de usar el depurador por el momento, y volveré a agregar tracepciones anticuadas a su código. Y asegúrese de hacer una compilación limpia y completa desde la fuente.


Otra posibilidad debe tener en cuenta es que los números de línea que el JRE está informando en tiempo de ejecución (y que el depurador se basa en) no se alinean con los números de línea en el código fuente. Esto podría suceder si cometió un error en sus procesos de compilación e implementación. El error puede ser algo así como olvidar guardar un archivo, olvidarse de construir, olvidarse de implementar la nueva versión de la aplicación o desincorporar el IDE del sistema de archivos.


Fwiw, la teoría es que esto es causado por throw null; o algo equivalente no se sostiene. El JLS section 14.18 dice:

"Si la evaluación de la expresión completa con normalidad, produciendo un valor nulo, a continuación, se crea una instancia V' de NullPointerException clase y arrojados en lugar de null."

Es más fácil de entender si se lee la frase en su contexto, pero está diciendo claramente que en realidad throw null; tiros un NullPointerException.


ACTUALIZACIÓN

he encontrado otra explicación plausible en esta cuestión de forma: Exception is NULL always

Básicamente, se está diciendo que el código emulado es lanzar una excepción que Eclipse no sabe nada, y el emulador de Eclipse está "útilmente" sustituyendo un null. Eso suena como un error del emulador.

+0

En mi humilde opinión es una dulce respuesta! – lucapette

Cuestiones relacionadas