Foros del Web » Programación para mayores de 30 ;) » Java »

Como puedo resolver un error "NullPointerException"

Estas en el tema de Como puedo resolver un error "NullPointerException" en el foro de Java en Foros del Web. El error q me arroja el servlet son los siguientes: R java.lang.NullPointerException R at java.io.File.<init>(File.java(Compiled Code)) R at suministros.AltaArchivoSumSubServlet.saveFiles(Alt aArchivoSumSubServlet.java:113) R at suministros.AltaArchivoSumSubServlet.processReques t(AltaArchivoSumSubServlet.java:56) R ...
  #1 (permalink)  
Antiguo 19/07/2007, 11:35
 
Fecha de Ingreso: julio-2007
Mensajes: 14
Antigüedad: 16 años, 9 meses
Puntos: 0
Como puedo resolver un error "NullPointerException"

El error q me arroja el servlet son los siguientes:
R java.lang.NullPointerException
R at java.io.File.<init>(File.java(Compiled Code))
R at suministros.AltaArchivoSumSubServlet.saveFiles(Alt aArchivoSumSubServlet.java:113)
R at suministros.AltaArchivoSumSubServlet.processReques t(AltaArchivoSumSubServlet.java:56)
R at suministros.AltaArchivoSumSubServlet.doPost(AltaAr chivoSumSubServlet.java:175)
R at javax.servlet.http.HttpServlet.service(HttpServlet .java:760)
R at javax.servlet.http.HttpServlet.service(HttpServlet .java:853)
R at com.ibm.ws.webcontainer.servlet.StrictServletInsta nce.doService(StrictServletInstance.java:110)
R at com.ibm.ws.webcontainer.servlet.StrictLifecycleSer vlet._service(StrictLifecycleServlet.java:174)


Mi servlet se dedica a subir un archivo al la unidad c y de ahi pasarlo a la base de datos y hasta ahi lo hace todo bien sino q hasta el final, me arroja estos errores...

Mi servlet es el siguiente:


public class AltaArchivoSumSubServlet extends HttpServlet
{
protected void processRequest (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
System.out.println ("Comenzamos procesamiento de ficheros");
try
{
saveFiles(request,out);
}
catch(Exception e)
{
e.printStackTrace();
}
out.close();
}

suministros objsuministros = new suministros ();
SuministrosReglas objregsum = new SuministrosReglas();

void depura(String cadena)
{
System.out.println("El errors es --> :"+cadena);
}

private void saveFiles(HttpServletRequest request, PrintWriter out)
throws Exception
{

try {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1000000000);
factory.setRepository(new File ("c:\\ArchivosSubidos"));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(1000000000);
List items = upload.parseRequest(request);
boolean ok = false;
if (items==null)
{
System.out.println("La lista es nula");
throw new FileUploadException("Sin archivos");
}
Iterator i = items.iterator();
FileItem actual=null;
while(i.hasNext())
{
actual=(FileItem)i.next();
String fileName = actual.getName();
String nombreFichero = (new File(fileName).getName());
File fichero = new File ("c:\\ArchivosSubidos\\"+nombreFichero);
fichero = new File ("c:\\ArchivosSubidos\\"+fichero.getName());
actual.write(fichero);
String subestacion = (String) session.getAttribute("subestacion");
session.setAttribute("subestacion",subestacion);
String usuario = (String) session.getAttribute("usuario");
session.setAttribute("usuario",usuario);
String idSub=objinfobras.getIdSE(subestacion);
String idusuario=usuario;
int idco=(objsuministros.getIdCoMax(idSub,idfamilia));
ok = objsuministros.UpdateSumSubArchivo(idSub,idfamilia ,idco,fichero);
System.out.println("Paso el Insert --> "+ok);

out.println("<html>");
out.println("<head></head>");
out.println("<body BGCOLOR=\"#abcdef\">");
out.println("<CENTER><H1><HR WIDTH='80%'><B><FONT FACE=\"Arial,Helvetical\" COLOR=\"#3399FF\">" +
"Sus datos se han guardado Satisfactoriamente: </FONT> <HR WIDTH='80%'></H1>");
out.println("<A href=\"/prosilWeb/suministros/AltaSuministrosSub.jsp\"> Regresar a dar de alta otro Suministro </A>");
out.println("</CENTER></body></html>");
out.close();


}
}

catch(IOException e)
{
//No es un error, sino tan solo la primera vez q se llama a esta pagina
}

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
System.out.println("Entro al segundo servlet");
processRequest(request,response);
}
}
  #2 (permalink)  
Antiguo 19/07/2007, 14:59
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Re: Como puedo resolver un error "NullPointerException"

parece ser que cuando estas instanciando la clase File, el parametro que le estas pasando es un null, revisa eso, me parece que es en esta linea

String nombreFichero = (new File(fileName).getName());

pero ve y checa la 113 ahi esta el error, intenta hacer algo asi

String nombreFichero = (new File(fileName)).getName();

checa eso y me cuentas

have funnnnnnnnnnnnnn
  #3 (permalink)  
Antiguo 27/07/2007, 10:42
 
Fecha de Ingreso: julio-2007
Mensajes: 14
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Como puedo resolver un error "NullPointerException"

Cita:
Iniciado por stock Ver Mensaje
parece ser que cuando estas instanciando la clase File, el parametro que le estas pasando es un null, revisa eso, me parece que es en esta linea

String nombreFichero = (new File(fileName).getName());

pero ve y checa la 113 ahi esta el error, intenta hacer algo asi

String nombreFichero = (new File(fileName)).getName();

checa eso y me cuentas

have funnnnnnnnnnnnnn
Muchas gracias....por el detalle, pero aun así no deja de marcar el mismo error.....y me preguntaba si es posible q tenga q agregar un cach dentro de un throws Exception ya q ya tengo uno....pero si puedo hacer esto....Como lo haria...?
  #4 (permalink)  
Antiguo 27/07/2007, 11:25
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Como puedo resolver un error "NullPointerException"

Hola:

¿Cual es la línea 113 de AltaArchivoSumSubServlet.java?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 30/07/2007, 10:32
Avatar de cris_maco  
Fecha de Ingreso: abril-2007
Ubicación: Salamanca
Mensajes: 254
Antigüedad: 17 años
Puntos: 0
Re: Como puedo resolver un error "NullPointerException"

el error te da en las lineas 113, 56 y 175 mira a ver que tienen en comun. A mi me parece que el request o el response son null.

por cierto yo tambien estoy intentando usar el UpLoad, pero me da este fallo

javax.servlet.ServletException: javax.servlet.ServletException: BeanUtils.populate
java.lang.IllegalArgumentException: Cannot invoke proyecto.hibernate.struts.form.ActuacionesForm.set Documento - argument type mismatch

sabeis a que se puede deber?

porque cuando quito:enctype="multipart/form-data" no sale el error, pero claro no sube el fichero

gracias
  #6 (permalink)  
Antiguo 01/08/2007, 17:44
 
Fecha de Ingreso: julio-2007
Mensajes: 14
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Como puedo resolver un error "NullPointerException"

Cita:
Iniciado por chuidiang Ver Mensaje
Hola:

¿Cual es la línea 113 de AltaArchivoSumSubServlet.java?

Se bueno.
Se supone que sigue siendo esta misma linea
String nombreFichero = (new File(fileName).getName());
donde se origina el error,..pero con las pruebas que ya hice me di cuenta que el ciclo del while no se trunca, porque toma el nombre del fichero y lo guarda, pero regresa he intenta volver a tomar otro nombre de fichero y como no encuentra nada marca null,...como podría truncar el ciclo while...
Gracias...
  #7 (permalink)  
Antiguo 01/08/2007, 23:37
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Re: Como puedo resolver un error "NullPointerException"

Hola:
Pues fileName es null. Comprueba que devuelve en la línea anterior actual.getName(), que posiblemente está devolviendo null. Si eso es correcto, deberías poner un if

String fileName = actual.getName();
if (fileName != null)
{
String nombreFichero = (new File(fileName).getName());
...

De todas formas, no entiendo si ya tienes fileName para que necesitas un new File().getName() para obtener ¿el nombre del fichero otra vez?. Podría entenderlo si supones que getName() te va a devolver el nombre con el path completo, pero veo más abajo que añades delante un c:\ArchivosSubidos ...

El bucle se trunca cuando no hay más elementos. El problema es que si te devuelve elementos en la variable actual, pero actual.getName() es el que te devuelve null. Quizás deberías ver cómo se rellenan esos datos para evitar esta situación.

Si no lo consigues y quieres romper el bucle, pon un break;

while (...)
{
...
if (condicion de fin de bucle)
break;
}

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 15/08/2007, 12:06
 
Fecha de Ingreso: julio-2007
Mensajes: 14
Antigüedad: 16 años, 9 meses
Puntos: 0
Re: Como puedo resolver un error "NullPointerException"

MUCHAS GRACIAS...... con tu ayuda, he podido solucionar mi problema.... GRACIAS....


Cita:
Iniciado por chuidiang Ver Mensaje
Hola:
Pues fileName es null. Comprueba que devuelve en la línea anterior actual.getName(), que posiblemente está devolviendo null. Si eso es correcto, deberías poner un if

String fileName = actual.getName();
if (fileName != null)
{
String nombreFichero = (new File(fileName).getName());
...

De todas formas, no entiendo si ya tienes fileName para que necesitas un new File().getName() para obtener ¿el nombre del fichero otra vez?. Podría entenderlo si supones que getName() te va a devolver el nombre con el path completo, pero veo más abajo que añades delante un c:\ArchivosSubidos ...

El bucle se trunca cuando no hay más elementos. El problema es que si te devuelve elementos en la variable actual, pero actual.getName() es el que te devuelve null. Quizás deberías ver cómo se rellenan esos datos para evitar esta situación.

Si no lo consigues y quieres romper el bucle, pon un break;

while (...)
{
...
if (condicion de fin de bucle)
break;
}

Se bueno.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:46.