Foro sobre Java SE > IOException siempre me devuelve un null
Guenas.
No pones la excepción.
De todos modos me maravilla que digas que el método corre bien.
Tienes un bucle infinito. Dentro de el creas continuamente canales de lectura y no los cierras.
Un saludo
Si en lugar de System.out.println(ex.getMessage()); pones ex.printStackTrace(); puedes obtener informacion mucho mas valiosa que un simple "null" sobre la excepcion que se produce.
Un saludo
Al poner el ex.printStackTrace(), pasa esto:
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:801)
at java.io.ObjectInputStream.(ObjectInputStream.java:299)
at pila.Lista.recuperaFichero(Lista.java:116)
at pila.Pila.main(Pila.java:70)
Porque no pones la pila completa? Cual es la excepcion? EOFException?
Bueno, da igual. En todo caso tiene pinta de que lo que te pasa es que no estas cerrando el ObjectInputStream al final de cada iteracion.
En cuanto lo resuelvas entonces seguramente ya te funcionara correctamente el bucle infinito.
Un saludo
http://www.javahispano.org/contributor/23846130 (paposo) tiene toda la razón, tienes un bucle infinito! Asegúrate de mirar bien tu codigo
Este función los que hace es recuperar los datos de un fichero de objetos y meterlo es una lista. La función en si funciona perfectamente, pero siempre salta un null, cuando se ejecuta.
public void recuperaFichero() throws ClassNotFoundException{
Datoscliente datos;
//vaciamos la lista;
primero=null;
FileInputStream salida=null;
ObjectInputStream fsalida=null;
try{
salida = new FileInputStream(listado); //listado es donde guardo la ruta del fichero
while(true){
fsalida=new ObjectInputStream(salida);
datos = (Datoscliente) fsalida.readObject();
apilarFinal(datos);
}
}catch(IOException ex){
System.out.println(ex.getMessage());
}finally{
try{
if(fsalida!=null){
fsalida.close();
}
}catch(IOException ex){
System.out.println(ex.getMessage());
}
}
}