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

Problema con java.lang.NullPointerException

Estas en el tema de Problema con java.lang.NullPointerException en el foro de Java en Foros del Web. Hola, tengo un problema con el java.lang.NullPointerException, no se muy bien lo que significa, si alguien me lo pudiera explicar. Y de que modo podria ...
  #1 (permalink)  
Antiguo 08/01/2006, 10:49
 
Fecha de Ingreso: enero-2004
Mensajes: 75
Antigüedad: 20 años, 3 meses
Puntos: 0
Problema con java.lang.NullPointerException

Hola, tengo un problema con el java.lang.NullPointerException, no se muy bien lo que significa, si alguien me lo pudiera explicar.

Y de que modo podria arreglarlo.
__________________
Gracias y un saludo
  #2 (permalink)  
Antiguo 08/01/2006, 10:59
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Hola!

Un NullPointerException se lanza cuando alguna variable está llegando con valor null a un lugar que no puede hacerlo. Para solucionarlo tienes que localizar ese lugar y capturar la excepción con un try {...} catch (Exception e) {...}

Otra cosa que puedes hacer es verificar por tus propios medios, es decir, preguntarle a la variable si viene nula, por ejemplo:

String variable = null;

if (variable == null) {
// tal cosa
} else {
// la otra cosa
}

Debes recordar que el null solo se le asigna a aquellos tipos para los que reservas memoria, es decir: objetos. Como has de saber para comparar objetos se utiliza equals, pero para saber si un objeto viene null tienes que hacerlo como puse en el ejemplo: variable == null ó variable != null.

Espero que eso pueda ayudar.
__________________
El último TipdaR
  #3 (permalink)  
Antiguo 08/01/2006, 14:13
 
Fecha de Ingreso: enero-2004
Mensajes: 75
Antigüedad: 20 años, 3 meses
Puntos: 0
Con lo mismo de antes, el problema me viene en

public static void main(String[] args){
Huffman huff;
if(args.length>0){
try{
huff=new Huffman(args[0]);
}catch(NullPointerException e){
System.out.println("Excepció llençada");
}

}else{
huff=new Huffman(null);
}
}

//constructor
public Huffman(String Nom){
t=new TaulaFreq(Nom);
t.ConstruirTaula();
c=new CuaPrioritat();
c.crear(t.taula, t.tamany);
arbre=huffman(t.tamany);
try{
InsertarArbre(arbre, t.taula, t.tamany, "");
}catch(NullPointerException e){
System.out.println("Excepció llençada");
}

//MostrarArbre(arbre);
t.MostrarTaula();
codificat=Codificar(t.fitxer);
System.out.println("El promitg es: "+t.Promitg());
}

Yo lo que quiero es abrir un .txt i leerlo pero no se muy bien como hacerlo, si alguien me puede ayudar...
__________________
Gracias y un saludo
  #4 (permalink)  
Antiguo 08/01/2006, 16:54
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 9 meses
Puntos: 53
no se que rayos estas intentando hacer con ese codigo(no lo he leido lo suficiente), pero si lo que quieres es simplemente leer un archivo de texto, te sugiero le des un vistazo a esta FAQ

http://forosdelweb.com/showpost.php?...4&postcount=10

have funnnnnnnn!!
  #5 (permalink)  
Antiguo 08/01/2006, 19:34
Avatar de Tipdar  
Fecha de Ingreso: octubre-2005
Ubicación: Aquí y allá.
Mensajes: 323
Antigüedad: 18 años, 6 meses
Puntos: 7
Y tienes una clase con el algoritmo de encriptación de Huffman... ¿en qué lugar es que lanza la excepción? ¿No has traceado el programa? Si describieras mejor que es lo que necesitas tal vez alguien podría ayudarte mejor.

Saludos!
__________________
El último TipdaR
  #6 (permalink)  
Antiguo 22/09/2008, 11:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 3
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Problema con java.lang.NullPointerException

hola.

A mi me sale un error como ese de "java.lang.NullPointerException" tambien. A ver si consigo explicarme. Yo tengo un programa, que lo tengo divido en dos ficheros (clases o como se llamen xD) dentro del mismo paquete, llamemoslos "programa1" y "programa2". Y en uno de ellos (el "programa2") creo un objeto del otro. A partir de ese objeto, estando en el "programa2" llamo a una funcion que esta definida en el "programa1" y entonces al ejecutarlo, cuando llega a ese punto me sale el error.

¿¿alguna idea??
  #7 (permalink)  
Antiguo 28/09/2008, 17:40
 
Fecha de Ingreso: septiembre-2008
Mensajes: 1
Antigüedad: 15 años, 6 meses
Puntos: 0
Sonrisa Respuesta: Problema con java.lang.NullPointerException

Chica seguramente las referencias de un programa al otro estan mal hechas... ya que es un error con NullPointerException lo mas propable es que estes referenciando un null.
  #8 (permalink)  
Antiguo 11/12/2008, 11:56
 
Fecha de Ingreso: diciembre-2008
Mensajes: 233
Antigüedad: 15 años, 4 meses
Puntos: 1
Misma duda

Buenas, me pasa tres cuartos de lo mismo, es decir me sale el mismo error, pero no entiendo porqué ya que hago caso a "Tipdar", es decir, tengo puesto un if donde recojo que pueda ser un null, copio parte del código a continuación:

do
{
System.out.println("Has elegido consultar los datos de un inversor.");
System.out.println("");
System.out.println("Dime la potencia del inversor a consultar: ");
inverter.setPower(teclado.readLine());

//Llamada a la fachada o FACADE
InverterFACADE inverterfacaderead = new InverterFACADE();
inverter=inverterfacaderead.ReadByPower(inverter);

if (inverter!=null)
{
System.out.println("Los datos del inversor seleccionado son: " +
"Power "+inverter.getPower()+", Temperature "+
inverter.getTemperature()+", Moisture "+inverter.getMoisture()+
" y Performance "+inverter.getPerformance());
}
else
{
System.out.println ("Este inversor no existe");
}
System.out.println("¿Desea consultar algún otro inversor? Responda si o no");
respuesta = teclado.readLine();

/*El if y el else if son para cuando el usuario da otra respuesta que no sea"si" o "no", que son las que se les pide, ya sean SI, NO, u otra cualquiera.*/
while(!respuesta.equals("si")&& !respuesta.equals("no"))
{
System.out.println("Te has equivocado de respuesta, inténtalo de nuevo.");
System.out.println("¿Quieres consultar inversor? Responde si o no");
respuesta=teclado.readLine();
}
}
while (respuesta.equals("si"));

El caso es que si hago una primera consulta y no hay ningún registro con ese valor, sigue el código, y pregunta de nuevo, pero si le digo que sí y hago una segunda consulta, y tampoco hay un registro con ese valor, entonces me dá el error.

Si podéis ayudarme os lo agradecería.

Un saludo
  #9 (permalink)  
Antiguo 11/12/2008, 22:28
Avatar de Adolfiten  
Fecha de Ingreso: enero-2008
Ubicación: Frente a mi monitor...
Mensajes: 572
Antigüedad: 16 años, 3 meses
Puntos: 7
Respuesta: Problema con java.lang.NullPointerException

A mí me tiraba este error con un botoncito rojo debajo a la derecha el netbeans... nunca supe qué era, pero no me trancaba todo y tenía que cerrar el IDE.

Saludos.
  #10 (permalink)  
Antiguo 29/06/2012, 12:43
(Desactivado)
 
Fecha de Ingreso: marzo-2012
Mensajes: 366
Antigüedad: 12 años
Puntos: 31
Respuesta: Problema con java.lang.NullPointerException

Tengo el mismo error. En mi caso viene al comparar arrays.

Tengo un programa para hacer un histograma con los pesos de los alumnos.

He aqui el código:

Cita:
/*Se desea realizar programa que lea los pesos de los alumnos y haga un histograma con
los pesos de los alumnos de un determinado curso. Si el peso no tiene ningún alumno no sale.
Entre 50 y 100 kg.*/
package histograma;
import java.lang.reflect.Array;
import java.util.*;
public class Histograma {
public static void main(String[] args) {
int temp=0,vector[];
Scanner sc=new Scanner(System.in);
System.out.print("¿Cuantos alumnos tienes?");
int nPeso=sc.nextInt();
clase Pesos=new clase(nPeso);
Pesos.RellenarArray();
Pesos.mostrarHistograma();
}
}
Y he aqui la clase y los métodos de la clase...
Cita:
package histograma;
import java.util.*;
public class clase {
public int n,vector[],histograma[][];
public clase(int n)
{
dimensionarArray(n);
}
public void dimensionarArray(int n)
{
vector=new int[n];
}
public void RellenarArray(){
Scanner sc=new Scanner(System.in);
System.out.println("Introduce el peso de los alumnos\n");
for (int i=0;i<vector.length;i++)
{
do
{
System.out.print("Alunmno nº "+(i+1)+":");
n=sc.nextInt();
if (n>=50&&n<=100)
{
vector[i]=n;
}
else
{
System.out.println("Solo sirven los valores entre 50 y 100.");
}
}while(vector[i]<50||vector[i]>100);
}
Arrays.sort(vector);
crearHistograma();
}
public void crearHistograma()
{
int histograma[][]=new int[2][vector.length];
for (int j=0;j<vector.length;j++)
{
histograma[0][j]=vector[j];
for (int k=0;k<vector.length;k++)
{
if (histograma[0][j]==vector[k])
{
histograma[1][j]++;
}
}
}
}
public void mostrarHistograma()
{
for (int i=0;i<vector.length-1;i++)//De los valores repetidos, dejo a 0 todas las casillas con valores repetidos excepto la última para cada valor repetido.
{
if (vector[i]==vector[i+1])
{
vector[i]=0;
}
}
for (int i=0;i<vector.length;i++)//Ahora que solo se repiten 1 vez, muestro los que coinciden.
{
if (vector[i]==histograma[0][i]) // <-- Según el netbeans, es en esta línea donde salta el error.
{
System.out.println(histograma[0][i]+" "+histograma[1][i]);
}
}
}
}
Edito:

Creo saber donde está el error, pero no se como solucionarlo.

El netbeans me lanza un aviso (bombilla amarilla) sobre esta línea...

Cita:
public void crearHistograma()
{
int histograma[][]=new int[2][vector.length]; <--mensaje del netbeans: La variable local oculta un campo.
Esto me hace pensar, que en el método donde dimensiono el array histograma, coge el array histograma como variable local... con lo que al acabar el método, histograma queda igualmente vacio, y sin datos. Así pues, luego al ir a comparar en el método mostrarHistograma, da error pues los valores de histograma no se han guardado y están todos en null.

Si esta suposición es correcta... como arreglo esto?

Última edición por Kritik; 29/06/2012 a las 13:56
  #11 (permalink)  
Antiguo 01/07/2012, 19:03
Avatar de zero0097  
Fecha de Ingreso: abril-2010
Ubicación: México
Mensajes: 481
Antigüedad: 14 años
Puntos: 69
Respuesta: Problema con java.lang.NullPointerException

Si usas un IDE muchos tienen la opcion de DEBUG usala ys eguro encontrarás extactamente tu falla......

A la hora de que te lanza la excepcion puedes usar un ex.printStackTrace() y te dira que excepción ocurre y en que lineas se originó....

Es evidente que un objeto que tienes de clarado no lo has seteado algun valor si yo hago esto:
Código:
public class uno {
	public static void main(String[] args) {
		prueba obj;
		System.out.println(obj.metodo());
	}
}

class prueba {
	public String metodo() {
		return "El objeto esta instanciado!";
	}
}
Podria marcar un nullPointerException, por que el objeto de la clase prueba no esta creado, solo tienes la clase pero no el objeto de esa clase (no se si ese codigo lance null aki no tengo compilador haha)...

En algun momento es muy probable que al manejar tus objetos hagas lo mismo, en el caso de mi ejemplo se arregla asi:
Código:
public class uno {
	public static void main(String[] args) {
		prueba obj = new prueba();
		System.out.println(obj.metodo());
	}
}

class prueba {
	public String metodo() {
		return "El objeto esta instanciado!";
	}
}
sin embargo en algunas aplicaciones hacer el new significa crear una instancia totalmente nueva de un objeto del cual no puedes hacerlo como un GUI (mal diseñada) por que te apareceria lo mismo 2 veces, alli cuando necesitas pasar un objeto puedes usar un getter en una clase para pasar el objeto con sus valores y copiarlo a otro objeto de tu clase... ejemplo:

Código:
public class uno {
	//tengo mi variable (clase) que no esta hecha objeto aún
	//si la uso asi nomas da NullPointerException
	private static Prueba miObjeto;
	
	public static void main(String[] args) {
		//creo un obj para usar getter
		Dos obj2 = new Dos();
		
		//uso el getter para traer el valor del objeto ya instanciado, osea no lo instancio aqui si no que ya viene
		miObjeto = obj2.getObj();
		
		//tambien puede ser asi: miObjeto = (new Dos()).getObj();
		
		//ahora uso los metodos sin tener un nullPointer!
		System.out.println(miObjeto.metodo());
	}
}

class Dos {
	private Prueba obj; //el objeto no se puede acceder desde afuera
	
	//constructor
	public Dos() {
		obj = new Prueba();
	}
	
	//genero un getter para sacar el objeto desde fuera
	public Prueba getObj() {
		return obj;
	}
}

class Prueba {
	public String metodo() {
		return "El objeto esta instanciado!";
	}
}
__________________
De nada, hay te encargo +1...
  #12 (permalink)  
Antiguo 01/11/2012, 15:21
 
Fecha de Ingreso: noviembre-2008
Mensajes: 150
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Problema con java.lang.NullPointerException

Hola muy buenas tardes me gustaria tener ayuda de los expertos en Java
tengo un programa simple donde QUIERO MOSTRAR los DATOS
de una tabla MYSQL 5.5
donde me sale el error este:
Código:
Estado HTTP 500 -

type Informe de Excepción

mensaje

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

excepción

org.apache.jasper.JasperException: Ha sucedido una excepción al procesar la página JSP /MostrarDatos.jsp en línea 17

14: Conexion con = new Conexion();
15: cn = con.Conn();
16: CallableStatement cstm;
17:       cstm = cn.prepareCall("{call ListarBus}");
18:   ResultSet rsSel = cstm.executeQuery(); 
19:   while (rsSel.next()) {
20:     String ID = rsSel.getString(1);


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
causa raíz

java.lang.NullPointerException
	org.apache.jsp.MostrarDatos_jsp._jspService(MostrarDatos_jsp.java:80)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
nota La traza completa de la causa de este error se encuentra en los archivos de diario de Apache Tomcat/7.0.27.

Apache Tomcat/7.0.27
Donde me indica que el error esta en MostrarDatos_jsp.java:80 (lo busque en la clase generada y me sale error en el: String A7 = rsSel.getString(15); )

este es el jsp : MostrarDatos.jsp

Código:
<%@page import="Conn.Conexion"%>
<%@page import="java.sql.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Mostrar Asientos Disponibles</title>
    </head>
    <body>
<%
int xN = 0;
Connection cn = null;
Conexion con = new Conexion();
cn = con.Conn();
CallableStatement cstm;
      cstm = cn.prepareCall("{call ListarBus}");
  ResultSet rsSel = cstm.executeQuery(); 
  while (rsSel.next()) {
    String ID = rsSel.getString(1);
    String Fecha = rsSel.getString(2);
    String Bus = rsSel.getString(3);
    String Origen = rsSel.getString(4);
    String Destino = rsSel.getString(5);
    String Salida = rsSel.getString(6);
    String Llegada = rsSel.getString(7);
    String Chofer = rsSel.getString(8);
    String A1 = rsSel.getString(9);
    String A2 = rsSel.getString(10);
    String A3 = rsSel.getString(11);
    String A4 = rsSel.getString(12);
    String A5 = rsSel.getString(13);
    String A6 = rsSel.getString(14);
    String A7 = rsSel.getString(15);
    String A8 = rsSel.getString(16);
    String A9 = rsSel.getString(17);
    String A10 = rsSel.getString(18);
    String Precio = rsSel.getString(19);
    String Stado=rsSel.getString(20);
    xN++;       

%>
        
        <p><%=ID%><br></p>
        <p><%=Fecha%><br></p>
        <p><%=Bus%><br></p>
        <p><%=Origen%><br></p>
        <p><%=Destino%><br></p>
        <p><%=Salida%><br></p>
        <p><%=Llegada%><br></p>
        <p><%=Chofer%><br></p>
        <p><%=A1%><br></p>
        <p><%=A2%><br></p>
        <p><%=A3%><br></p>
        <p><%=A4%><br></p>
        <p><%=A5%><br></p>
        <p><%=A6%><br></p>
        <p><%=A7%><br></p>
        <p><%=A8%><br></p>
        <p><%=A9%><br></p>
        <p><%=A10%><br></p>
        <p><%=Precio%><br></p>
        <p><%=Stado%><br></p>
        
        
        
        
<%
}
rsSel.close();
cstm.close();
con.desconectar();
%>
    </body>
</html>
Y este es EL SERVLETS: Conexion.java

Código:
package Conn;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Conexion {
  private String url = "jdbc:mysql://localhost/cascas";
    //El usuario de la base de datos
    private String user = "root";
    //La clave del usuario de la base de datos
    private String password = "zoldado";
    //Metodo para obtener la conexion con la base de datos

    public Conexion() {
    }
    Connection cn = null;
    public String error = "";

    public Connection Conn() {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            cn = DriverManager.getConnection(url, user, password);
        } catch (ClassNotFoundException e) {
            System.out.println("No se encontro Driver");
        } catch (SQLException e) {
            System.out.println("No se encontro la Conexion");
        } finally {
            return cn;
        }
    }

    public void desconectar() {
        try {
            cn.close();
        } catch (Exception e) {
            System.out.print(e.toString());
            error = e.toString();
        }
    }

}
porfavor urgente donde esta el problema no se he intentado todo las soluciones pero no se porque sucede eso es PRIMERA VES QUE TRABAJO CON MYSQL .

en fin
de ANTEMANO MUCHAS GRACIAS
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

SíEste tema le ha gustado a 2 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 17:45.