Autor Tema: Error java.lang.Double.parseDouble excepción java.lang.NullPointerException sun.  (Leído 2253 veces)

Yager2222

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Buenas amigos del foro, estoy teniendo problemas con el proyecto que estoy desarrollando:

La primera tabla sí que se me genera con el título, autor y precio.


El fallo me da al querer recuperar los libros en los que seleccioné la opción comprar en una segunda tabla, y me da el siguiente error:

Código: [Seleccionar]
Estado HTTP 500 – Internal Server Error


Tipo Informe de Excepción

Descripción El servidor encontró un error interno que hizo que no pudiera rellenar este requerimiento.

excepción
java.lang.NullPointerException
sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1838)
sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
java.lang.Double.parseDouble(Double.java:538)
modelo.GestionVentas.service(GestionVentas.java:39)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)


nota La traza completa de la causa de este error se encuentra en los archivos de registro del servidor.




GestionVentas.java

Código: [Seleccionar]
package modelo;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import beans.Libro;

@WebServlet("/GestionVentas")
public class GestionVentas extends HttpServlet {
private static final long serialVersionUID = 1L;

    public GestionVentas() {
        super();
    }

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

List<Libro> lista = null;
HttpSession misesion = request.getSession();
lista= (ArrayList<Libro>)misesion.getAttribute("lista");
if (lista == null)
lista= new ArrayList<Libro>();
switch(request.getParameter("opcion")) {

case "comprar":
String titulo = request.getParameter("titulo");
String autor = request.getParameter("autor");
String precio = request.getParameter("precio");

double e = Double.parseDouble(precio);

Libro l = new Libro(titulo, autor, e);
lista.add(l);
misesion.setAttribute("lista", lista);
request.getRequestDispatcher("libros.jsp").forward(request, response);
break;


case "eliminar":
lista.remove(Integer.parseInt(request.getParameter("id")));
misesion.setAttribute("lista", lista);
request.getRequestDispatcher("libros.jsp").forward(request, response);

break;

}
}
}

---------------------------

libros.jsp


Código: [Seleccionar]
<%@page import="beans.Libro"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE HTML>
<html>
<head>
<title>libros</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
</head>
<body>   
<h1>Listado de libros</h1>

<table border="1">
    <tr><th></th><th>Titulo</th><th>Autor</th><th>Precio</th></tr>
        <c:forEach items="${requestScope.libros}" var="libro" varStatus="i">
<tr>
<td><a href="GestionVentas?opcion=comprar&id=${i.index}">
              <input type="submit" value="Comprar"/></a></td>
<td>${libro.titulo}</td>
<td>${libro.autor}</td>
<td>${libro.precio}</td>
</tr>
</c:forEach>
</table>
<br/><br/>
<br/><br/>
<table border=1 cellspacing=1 cellpadding=7 bordercolor="black">
<tr><th></th><th>Titulo</th><th>Autor</th><th>Precio</th></tr>
<c:forEach items="${sessionScope.lista}" var="libro2" varStatus="i">

<tr>
<td><a href="GestionVentas?opcion=eliminar&id=${i.index}">
              <input type="submit" value="eliminar"/></a></td>
<td><c:out value="${libro2.titulo}"></c:out></td>
<td><c:out value="${libro2.autor}"></c:out></td>
<td><c:out value="${libro2.precio}"></c:out></td>
</tr>
</c:forEach>
</table>

<a href="Controller?op=doTemas">Otro tema</a>
<br/><br/>
</body>
</html>

Saludos
« Última modificación: 04 de Octubre 2020, 13:46 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:AYUDA (JAVA): ERROR Double.parseDouble
« Respuesta #1 en: 21 de Mayo 2020, 18:45 »
Hola.
Quizás no está recibiendo correctamente el dato de precio y al querer parsearlo a Double se produce la excepción.

Los parseos de cadenas String a valores numéricos siempre son "arriesgados", así que hay que poner medidas de control para decidir que hacer en caso de que no sea posible parsear y evitar que el programa se interrumpa porque no sabe que hacer.

Puedes usar try catch

Código: [Seleccionar]
double e;
try {
    e = Double.parseDouble(precio);
} catch (Exception ex) {
    e = 0d; //Parseo ha fallado, damos un valor double a e, aunque sea 0, para que el programa continúe
}

Ahí en el catch, hacemos que al menos la variable e obtenga un valor double válido.
Así el programa podrá continuar y se creará un objeto libro, con un precio de 0, pero al menos el programa continúa y puedes comprobar si el resto del código está funcionando bien.

En el catch puedes hacer lo que quieras, puedes pedirle que te muestre el valor del String precio, para ver por qué no ha sido posible parsearlo a double.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Yager2222

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Re:AYUDA (JAVA): ERROR Double.parseDouble
« Respuesta #2 en: 21 de Mayo 2020, 19:19 »
Muchas gracias Kabuto.

Me ha servido para ver que no está recibiendo correctamente ninguno de los datos. Tendré que seguir mirando que estoy haciendo mal en el "switch" al pasar los datos.

Gracias por la explicación

Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".