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

[SOLUCIONADO] otra vez java.lang.nullpointerexception

Estas en el tema de otra vez java.lang.nullpointerexception en el foro de Java en Foros del Web. hola de nuevo, he seguido con el codigo y me da el mismo error, (en otro punto), me parece que a pesar de su ayuda ...
  #1 (permalink)  
Antiguo 14/05/2013, 09:23
Avatar de kosbolt  
Fecha de Ingreso: mayo-2013
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
otra vez java.lang.nullpointerexception

hola de nuevo, he seguido con el codigo y me da el mismo error, (en otro punto), me parece que a pesar de su ayuda la ultima vez fue de milagro y no termine de entder bien el problema, les pongo el codigo con el error

Código Java:
Ver original
  1. /**
  2.  * regresa la ruta de un cartel dado un id
  3.  */
  4.  public void getRutaCartel(String id){
  5.      String ide = tirada.Ruta();
  6.   if (id == ide){
  7.    tirada.Ruta();
  8.     }
  9.   }

les comento un poco, tengo una clase llamada Cartel, otra Tirada y otra GestorTiradas, dentro de Cartel, unos atributos String llamados id y Ruta, por otro lado En tira y a traves de composicion vinculo la Tirada con el Cartel, y en Tirada tengo un metodo que me regresaa la ruta del Cartel llamado Ruta(), Tirada entra en GestorTirada a traves de un ArrayList, y en Gestor Tirada tengo el metodo anterior, el tema es que si llamo al metodo Ruta desde Tirada no hay problema.

Si entendi bien los mensajes del otro post, el problema biene por que la variable no esta inicializada y por eso me lanza un null, por otro lado lo que yo intentaba al hacer String ide = tirada.Ruta(), lo que intentaba era inicializarlo todo y que ide tubiera el valor de ruta que es el metodo tirada.Ruta:

Código Java:
Ver original
  1. public Cartel c1;
  2.  
  3. /**
  4.  * Permite la vinculacion de un Cartel a Una tirada
  5.  */
  6.  public void setCartel(Cartel elCartel)
  7.  {
  8.   c1 = elCartel;
  9.  }
  10.  
  11. /**
  12.  * Regresa la ruta del cartel asociado
  13.  */
  14.  public String Ruta()
  15.  {
  16.   return c1.setRuta();  
  17.  }

llevo un rato intentado corregirlo, pero no se que hacer, por cierto, al principio no estaba así, directamente llamada desde GestorTiradas al método dentro de Cartel para que me regresara la ruta, pero como fallaba decidí añadir un método en Tirada que llamara al de Cartel, y el de GestorTirada llama al de Tirada

llevo un rato dándole vueltas, y no se si no lo inicia lizo bien, o algo falla
  #2 (permalink)  
Antiguo 14/05/2013, 09:40
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: otra vez java.lang.nullpointerexception

ahi veo que estás declarando el Cartel c1 pero no lo estás inicializando.

¿Has entendido bien para que sirven los getters, los setters y los constructores? Me parece que no.

Los objetos llevan información, si no les indicas que información van a llevar, su contenido será vacío. Cuando tienes la clase tienes un molde a partir del cual vas a construir objetos de esa clase. Los constructores te permiten inicializar las variables a un valor determinado, y puede que no inicialice todas. Los setters te permiten modificar el valor de una variable dentro de un objeto accediendo de forma externa, y los getters te permiten obtener el valor de la variable correspondiente.

De ahí que return c1.setRuta(); no tenga sentido.

Además en java los objetos se comparan con .equals, no con ==, que se reserva únicamente para comparar tipos primitivos.

También deberías leerte algo sobre convenios de notación en java, para saber como debes nombrar las clases, métodos, atributos (variables/constantes), packages, etc.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 14/05/2013, 10:50
Avatar de kosbolt  
Fecha de Ingreso: mayo-2013
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: otra vez java.lang.nullpointerexception

Entonces aparte de los convenios de notacion ( se que los tengo que revisar, pero tengo que entregar el trabajo dentro de poco), el principal problema esta en que no lo inicializo en el cosntructor , eso es lo que entiendo, pues bien, Esto es lo que se me ha ocurrido para solucionarlo:

Código Java:
Ver original
  1. public class GestorTiradas
  2. {
  3.   private ArrayList<Tirada> tiradas;
  4.   private Tirada tirada;
  5.   String ide;
  6.  
  7. /**
  8.  * Constructor que crea una base de datos vacia.
  9.  */
  10.  public GestorTiradas(){
  11.   tiradas = new ArrayList<Tirada> ();
  12.   Cartel cartel = new Cartel();   --> tube que ponerlo para que no me diera el fallo de non.static
  13.   ide = cartel.setRuta();
  14.  }
  15.  
  16. /**
  17.  * regresa la ruta de un cartel dado un id
  18.  */
  19.  public void getRutaCartel(String id){
  20.  
  21.   if (id.equals (ide)){
  22.    tirada.Ruta();
  23.     }
  24.   }


Asi es como lo he puesto, el problema ahora es el siguiente, que no se por que se da al intentar comparar el codigo siempre eme da error(no hace nada por que el .equals nunca se cumple, ya que ide esta en blanco null) o es a es la impresion que me da, segun lo que se, he intentado llamar al constructor, pero me dice que no encuentra el metodo he intentado volver a poner ( ide = cartel.setRuta();) antes del if, pero em dice que no encuentra la variable cartel, ahora si que no se que pasa
  #4 (permalink)  
Antiguo 14/05/2013, 11:07
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: otra vez java.lang.nullpointerexception

ide = cartel.setRuta(); => NO sé que hace este método
System.out.println("El valor de ide es: " + ide);


por otra parte podrias haber tenido el primer codigo dentro de GestorTiradas y en vez de
Cartel cartel = new Cartel();
hubieses hecho
this.c1 = new Cartel();
y trabajado con c1...

Pero centrate en lo que modelas, debe ser una representacion de lo que pasa en la realidad, tu le puedes decir que información le pasas y luego visualizar como esa información va moviéndose entre las clases, interactuando, transformándose, desapareciendo, etc.. para llegar al resultado que quieres.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #5 (permalink)  
Antiguo 14/05/2013, 12:20
Avatar de kosbolt  
Fecha de Ingreso: mayo-2013
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: otra vez java.lang.nullpointerexception

Es lo que intento, ir visualizando lo que va pasando o lo que debería pasar, pero cuando da un problema de estos me desmorono, al leer tu comentario me di cuenta por que falla, es en el ide, en la primera linea del comentario me di cuenta, no debería ser cartel,setRuta, en todo caso seria cartel.setId, ahora esta asi:

public class GestorTiradas
{
private ArrayList<Tirada> tiradas;
private Tirada tirada;
String ide;

/**
* Constructor que crea una base de datos vacia.
*/
public GestorTiradas(){
tiradas = new ArrayList<Tirada> ();
Cartel cartel = new Cartel();
ide = cartel.setId();
}


/**
* regresa la ruta de un cartel dado un id
*/
public void getRutaCartel(String id){
if (id.equals (ide)){
System.out.println(tirada.Ruta());
}
else{
System.out.println("error");
}
}

el problema es que la variable String ide, nunca cambia de valor, es siempre null, por eso la comprobacion falla,pero ahí me quedo
  #6 (permalink)  
Antiguo 15/05/2013, 01:20
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: otra vez java.lang.nullpointerexception

¿Qué hace exactamente setId() en la clase Cartel?
Que yo sepa los setters necesitan un valor para asignárselo al atributo.

objeto.setAtributo(valor); //para que atributo dentro de objeto tenga asignado el valor
Clase variable = objeto.getAtributo(); //para recuperar el valor del atributo y asignarselo a variable

Es decir que tendrías que tener:
String ide = cartel.getId(); // Pero si al inicializar cartel o entre la inicialización y la llamada al get no se le ha asignado ningún valor al id lo vas a tener null
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: clase, metodo, string, vez
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 17:42.