Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > input string: "null"

hola todos, como están
tengo dos errores en mi codigo que al parecer son por la misma razon pero no he dado con el chiste:
el primero me bota: "Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "null""

esta es la parte del codigo:

private void BotonTotalActionPerformed(java.awt.event.ActionEvent evt) {

nfactura();
double sumatoria1=0;
int totalRow= tblCesta.getRowCount();
totalRow-=1;
for(int i=0;i<=(totalRow);i++)
{
double sumatoria= Double.parseDouble(String.valueOf(tblCesta.getValueAt(i,3))); //aqui es el problem
sumatoria1+= sumatoria;
TextTotal.setText(String.valueOf(sumatoria1));

}

}

y el segundo es este: "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException"

el codigo de este es:

void factura(){

int totalRow= tblCesta.getRowCount();
totalRow-=1;
for(int i=0;i<=(totalRow);i++)
{
int cantidad = Integer.parseInt(String.valueOf(tblCesta.getValueAt(i,0)));
String nombre = String.valueOf(tblCesta.getValueAt(i,1));
String valor = String.valueOf(tblCesta.getValueAt(i,3));

String sSQL = "";

Conexion mysql = new Conexion();
Connection cn = mysql.ConexionMySql();

sSQL = "SELECT stock FROM inventario WHERE producto ='"+nombre+"'";

try
{
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery(sSQL);

rs.next();

int nstock = rs.getInt("stock");
System.out.println ("paso 1 ok");

if(nstock>=cantidad){
sen.registrar_producto((TxtNFactura.getText()),nombre,String.valueOf(cantidad),valor); //el otro problem
}
else{
JOptionPane.showMessageDialog(this, "el stock no soporta la cantidad");
}

}
catch (SQLException ex)
{
JOptionPane.showMessageDialog(null, ex);
}

}


}
Muchas gracias de antemano.

septiembre 13, 2016 | Registered Commenterkornatis

String.valueOf(argumento) devuelve null si argumento es null
Da toda la impresión de que obtienes valores null de esa tabla.

septiembre 13, 2016 | Registered Commenterchoces

Choces muchas gracias por tu respuesta, en la primera parte la suma la hace bien y después está el error, en la segunda no alcanza a tomar los datos de la tabla, volví a revisar, se que el error está en que en algún momento me toma un valor nulo, aunque hago el count de cuantos registros tiene la tabla no se en que momento es que toma un valor nulo, muchas gracias nuevamente si necesitan información que este omitiendo por favor diganme.
Gracias amigos

septiembre 13, 2016 | Unregistered CommenterKornatis

Puedes usar un debugger y ejecutar paso a paso hasta ver qué argumento es null, o imprimir por consola los argumentos antes de hacer el String.valueOf(a).
Lo más probable es que tengas valores null en la JTable, y no los "veas" porque aparecen en blanco en las celdas correspondientes.

septiembre 13, 2016 | Registered Commenterchoces

Hola choces y amigos muchas gracias nuevamente,
Aunque no tengo mucha experiencia en el debug hice el deber.
Primero lo hice para la sumatoria:
La tabla cesta es una tabla en la que se van agregando productos que luego se sumarán y facturaran, en este caso agregue 3 productos, imprimi sumatoria y puse breakpoints para seguir el hilo, en este caso el total de filas que arroja el getrowcount es 8 (no se porque), pensé que ese sería el problema para el for, y que estaría sumando más veces de lo que debería, pero no... cambie totalRow en el for por 2 (para que sólo haga el ciclo 3 veces) y efectivamente sólo hace el ciclo tres veces y va imprimiendo la suma, porfa una luz, perdón si es algo muy tonto o si lo estoy haciendo mal.

Muchas gracias nuevamente.

septiembre 14, 2016 | Unregistered CommenterKornatis

No sé cómo has declarado esa JTable o el modelo. Es muy probable que esas 8 filas sean un valor por defecto del modelo.

septiembre 14, 2016 | Registered Commenterchoces

Choces eres un genio :), en cuanto a la tabla tenias razón, era un problema en la declaración, por ese lado ok aunque yo pensaba que era la misma razón para mis dos errores pero sigo teniendo el "Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException", que puedo revisar en ese caso?

muchas gracias estoy aprendiendo mucho.

septiembre 16, 2016 | Unregistered Commenterkornatis

Si en una fila, una celda contiene un valor null, puedes comprobar ese valor antes de pasarlo como argumento al String.valueOf

septiembre 16, 2016 | Registered Commenterchoces

hola choces, gracias por tu repuesta, ya había revisado eso imprimiéndolos y aparentemente esta bien, te muestro:

try
{
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery(sSQL);

rs.next();

int nstock = rs.getInt("stock");
System.out.println (cantidad);
System.out.println (nombre);
System.out.println (valor);
if(nstock>=cantidad){
sen.registrar_producto((TxtNFactura.getText()),nombre,String.valueOf(cantidad),valor);
}
else{
JOptionPane.showMessageDialog(this, "el stock no soporta la cantidad");
}

para cantidad, nombre y valor está bien lo que traen, gracias nuevamente

septiembre 16, 2016 | Unregistered Commenterkornatis

Ten cuidado con esas comprobaciones, porque si uno de esos valores es null, el println imprimirá "en blanco", lo que puede despistarte.
Es más seguro así:
System.out.println(nombre==null); //imprime true si es null, false si no lo es

septiembre 16, 2016 | Registered Commenterchoces

esto se pone emocionante jeje...

System.out.println(nombre==null);
System.out.println(String.valueOf(cantidad)==null);
System.out.println(valor==null);

false todos no hay nulos,

septiembre 16, 2016 | Unregistered Commenterkornatis

Entonces, ¿en qué línea se lanza la excepción?
Si esos argumentos no son null, valueOf no puede lanzar la excepción...

septiembre 16, 2016 | Registered Commenterchoces

mira aqui es:
void factura(){

int totalRow= tblCesta.getRowCount();
totalRow-=1;
for(int i=0;i<=(totalRow);i++)
{
int cantidad = Integer.parseInt(String.valueOf(tblCesta.getValueAt(i,0)));
String nombre = String.valueOf(tblCesta.getValueAt(i,1));
String valor = String.valueOf(tblCesta.getValueAt(i,3));

String sSQL = "";

Conexion mysql = new Conexion();
Connection cn = mysql.ConexionMySql();

sSQL = "SELECT stock FROM inventario WHERE producto ='"+nombre+"'";

try
{
Statement st = cn.createStatement();
ResultSet rs = st.executeQuery(sSQL);

rs.next();

int nstock = rs.getInt("stock");
System.out.println(nombre==null);
System.out.println(String.valueOf(cantidad)==null);
System.out.println(valor==null);
if(nstock>=cantidad){
sen.registrar_producto((TxtNFactura.getText()),nombre,String.valueOf(cantidad),valor);//(esta es la linea 185)
}
else{
JOptionPane.showMessageDialog(this, "el stock no soporta la cantidad");
}

}
catch (SQLException ex)
{
JOptionPane.showMessageDialog(null, ex);
}

}


}

run:
false
false
false
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at sertlav.FrmFacturacion.factura(FrmFacturacion.java:185)
at sertlav.FrmFacturacion.BotonFacturarActionPerformed(FrmFacturacion.java:725)
at sertlav.FrmFacturacion.access$400(FrmFacturacion.java:19)
at sertlav.FrmFacturacion$6.actionPerformed(FrmFacturacion.java:448)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6516)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:747)
at java.awt.EventQueue.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:706)
at java.awt.EventQueue$3.run(EventQueue.java:704)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:720)
at java.awt.EventQueue$4.run(EventQueue.java:718)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:717)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 5 minutes 25 seconds)

Muchisimas gracias por el interes

septiembre 16, 2016 | Unregistered Commenterkornatis

sen.registrar_producto((TxtNFactura.getText()),nombre,String.valueOf(cantidad),valor);

O bien TxtNFactura es null, o bien alguna línea dentro de ese método registrar_producto lanza la excepción.

septiembre 17, 2016 | Registered Commenterchoces

muchas gracias por su ayuda, el problema era que efectivamente el método registrar producto tenia un problema porque no había declarado el statement...

:)

septiembre 22, 2016 | Unregistered Commenterkornatis