Foro sobre Java SE > input string: "null"
String.valueOf(argumento) devuelve null si argumento es null
Da toda la impresión de que obtienes valores null de esa tabla.
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
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.
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.
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.
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.
Si en una fila, una celda contiene un valor null, puedes comprobar ese valor antes de pasarlo como argumento al String.valueOf
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
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
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,
Entonces, ¿en qué línea se lanza la excepción?
Si esos argumentos no son null, valueOf no puede lanzar la excepción...
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
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.
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...
:)
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.