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

NullPointerException

Estas en el tema de NullPointerException en el foro de Java en Foros del Web. Buenos días, Tengo un código hecho en Java con errores de NullPointerException. ¿Podéis ayudarme? El código consiste en 4 clases: 1- Estación, que maneja rutas ...
  #1 (permalink)  
Antiguo 03/03/2014, 02:15
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
NullPointerException

Buenos días,

Tengo un código hecho en Java con errores de NullPointerException. ¿Podéis ayudarme?

El código consiste en 4 clases:
1- Estación, que maneja rutas y agujas (points).
2- Path, es el comienzo de la definición de ruta
3- Route, extiende de path y es la ruta. Tiene dos atributos que son agujas (points)
4- Agujas (points)

Básicamente en el main de Station creo 1 ruta y 2 agujas y asocio esas dos agujas a los atributos de la ruta.


Un saludo y gracias.



================================================== ===
================================================== ===






import java.util.Scanner;

public class Station {

/************ Attributes ****************/

private String stationName;
private int optionInExecution;
private boolean inExecution;


/************ Methods ****************/

private Station ()
{
stationName = "Atocha";
optionInExecution = 0;
inExecution = false;
}

public static void main (String[] args)
{
/* Objects creation */
Station stationAtocha;
stationAtocha = new Station();

Scanner in;
in = new Scanner(System.in);

Route Route1;
Route1 = new Route(); NULLPOINTEREXCEPTION!!!!!!

Point Point1; // Declaration
Point1 = new Point(); // Creation, Instantiation
Route1.point1 = Point1; // Association

Point Point2;
Point2 = new Point();
Route1.point2 = Point2;





System.out.printf(" ============================================\n");
System.out.printf(" Starting Station: %s \n", stationAtocha.stationName);
System.out.printf(" ============================================\n");
System.out.printf(" (1) - Establish Route\n");
System.out.printf(" (2) - Automatic Connect Route\n");
System.out.printf(" (3) - Manual Switch Over p1\n");
System.out.printf(" (4) - Manual Switch Over p2\n");
System.out.printf(" Select 0 to EXIT\n\n\n");

while ((0 != stationAtocha.optionInExecution) || (false == stationAtocha.inExecution))
{
System.out.printf("> Insert option: ");
stationAtocha.optionInExecution = in.nextInt();

stationAtocha.inExecution = true;

switch(stationAtocha.optionInExecution)
{
case 1:
if (true == Route1.Established)
{
System.out.printf("[NOK] Route is already Established\n\n");
}
else
{
if (true == Route1.establishRoute())
{
System.out.printf("[OK] The Route has been Established\n\n");
}
else
{
System.out.printf("[NOK] The Route is not Connected\n\n");
}
}
break;

case 2:
if (true == Route1.isConnected)
{
System.out.printf("[NOK] Route is already Connected\n\n");
}
else
{
Route1.autoConnectPath();
System.out.printf("[OK] Route has been Connected\n\n");
}
break;

case 3:
if (false == Route1.Established)
{
Point1.changePosition();
System.out.printf("[OK] Position of P1 has been Changed\n\n");
}
else
{
System.out.printf("[NOK] Route is Established. Impossible switch point1\n\n");
}

break;

case 4:
if (false == Route1.Established)
{
Point2.changePosition();
System.out.printf("[OK] Position of P2 has been Changed\n\n");
}
else
{
System.out.printf("[NOK] Route is Established. Impossible switch point2\n\n");
}

break;
case 0:
break;

default: stationAtocha.optionInExecution = 0;
break;
}
}
}

}






abstract public class Path {

/************ Attributes ****************/
protected boolean isConnected;
/* Importante. Como los atributos son objetos, se debe reservar memoria.
En estacion igualamos los points creados a estos objetos para asociarlos */
Point point1 = new Point();
Point point2 = new Point();

/************ Methods ****************/
protected Path ()
{
if ((true == point1.hasRightPosition()) && (true == point2.hasRightPosition())) NULLPOINTEREXCEPTION!!!!!!
{
isConnected = true;
}
else
{
isConnected = false;
}
}

abstract protected void autoConnectPath();
}







public class Route extends Path {

/************ Attributes ****************/
public boolean Established;


/************ Methods ****************/
protected Route() NULLPOINTEREXCEPTION!!!!!!
{
Established = false;
}

protected void autoConnectPath()
{
if (false == point1.hasRightPosition())
{
point1.changePosition();
}

if (false == point2.hasRightPosition())
{
point2.changePosition();
}

this.isConnected = true;
}

public boolean establishRoute()
{
if (true == isConnected)
{
Established = true;
}
return isConnected;
}
}








public class Point {

public enum pointPosition {GOOD, WRONG};

/************ Attributes ****************/
pointPosition Position;


/************ Methods ****************/
protected Point()
{
Position = pointPosition.WRONG;
}

public boolean hasRightPosition()
{
boolean isInGoodPosition = false;

if (pointPosition.GOOD == this.Position)
{
isInGoodPosition = true;
}

return isInGoodPosition;
}

protected void changePosition()
{
if (pointPosition.GOOD == this.Position)
{
this.Position = pointPosition.WRONG;
}
else
{
this.Position = pointPosition.GOOD;
}
}
}
  #2 (permalink)  
Antiguo 03/03/2014, 11:05
Avatar de josrv089  
Fecha de Ingreso: agosto-2013
Ubicación: Alajuela
Mensajes: 7
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: NullPointerException

En que ID estas trabajando?
A no ser que estes trabajando en Dr. Java Te recomendaría que debugues el codigo porque así se ve un poco complicado encontrar el error..
  #3 (permalink)  
Antiguo 04/03/2014, 00:31
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: NullPointerException

Hola,

Simplifico un poco el código eliminando líneas que no son importantes.

A ver si podéis echarme una mano.




public class Station {

/************ Attributes ****************/


/************ Methods ****************/

private Station ()
{

}

public static void main (String[] args)
{
/* Objects creation */
Station stationAtocha;
stationAtocha = new Station();

Route Route1;
Route1 = new Route(); NULLPOINTEREXCEPTION!!!!!!

Point Point1; // Declaration
Point1 = new Point(); // Creation, Instantiation
Route1.point1 = Point1; // Association

Point Point2;
Point2 = new Point();
Route1.point2 = Point2;



Route1.autoConnectPath();
}

}






abstract public class Path {

/************ Attributes ****************/
protected boolean isConnected;

Point point1;
Point point2;

/************ Methods ****************/
protected Path ()
{
if ((true == point1.hasRightPosition()) && (true == point2.hasRightPosition())) NULLPOINTEREXCEPTION!!!!!!
{
isConnected = true;
}
else
{
isConnected = false;
}
}

abstract protected void autoConnectPath();
}







public class Route extends Path {

/************ Attributes ****************/
public boolean Established;


/************ Methods ****************/
protected Route() NULLPOINTEREXCEPTION!!!!!!
{
Established = false;
}

protected void autoConnectPath()
{
if (false == point1.hasRightPosition())
{
point1.changePosition();
}

if (false == point2.hasRightPosition())
{
point2.changePosition();
}

this.isConnected = true;
}

public boolean establishRoute()
{
if (true == isConnected)
{
Established = true;
}
return isConnected;
}
}








public class Point {

public enum pointPosition {GOOD, WRONG};

/************ Attributes ****************/
pointPosition Position;


/************ Methods ****************/
protected Point()
{
Position = pointPosition.WRONG;
}

public boolean hasRightPosition()
{
boolean isInGoodPosition = false;

if (pointPosition.GOOD == this.Position)
{
isInGoodPosition = true;
}

return isInGoodPosition;
}

protected void changePosition()
{
if (pointPosition.GOOD == this.Position)
{
this.Position = pointPosition.WRONG;
}
else
{
this.Position = pointPosition.GOOD;
}
}
}
  #4 (permalink)  
Antiguo 04/03/2014, 00:51
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: NullPointerException

Hola:

No es lo mismo. Esto que es lo que tenías en el primer post no puede dar nullpointer

Código Java:
Ver original
  1. Point point1 = new Point();
  2. Point point2 = new Point();
  3.  
  4. /************ Methods ****************/
  5. protected Path ()
  6. {
  7. if ((true == point1.hasRightPosition()) && (true == point2.hasRightPosition())) NULLPOINTEREXCEPTION!!!!!!

pero esto otro, que es lo que acabas de poner, lo da seguro.

Código Java:
Ver original
  1. Point point1;
  2. Point point2;
  3.  
  4. /************ Methods ****************/
  5. protected Path ()
  6. {
  7. if ((true == point1.hasRightPosition()) && (true == point2.hasRightPosition())) NULLPOINTEREXCEPTION!!!!!!


¿Qué es lo que tienes en realidad?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 04/03/2014, 07:09
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: NullPointerException

Cierto.

Yo tengo esto:
Point point1;
Point point2;


Pero puse esto para solucionarlo:
Point point1 = new Point();
Point point2 = new Point();


Sin embargo no entiendo por qué tengo que hacer eso, porque yo no quiero reservar dos veces memoria. Ya reservo memoria para las agujas en la clase Station. No quiero ahcerlo también dentro de la clase Path.

Un saludo.
  #6 (permalink)  
Antiguo 04/03/2014, 07:35
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: NullPointerException

Bueno, lo primero, en el primer post lo tenías con los news y decías que te daba la excepción. Ahora dices que lo tenías sin los news y los has puesto para que no te de la excepción. Como comprenderás es muy difícil ayudarte si la información que pones no es la correcta.

No estás reservando dos veces la memoria. Si haces Point point2 estás declarando una variable, pero no reservando la memoria para su contenido. Eso sólo sucede con los tipos primitivos int, double, boolean, char, etc. No sucede con las clases String, Double, Character, Integer, ... no con tus clases. Es necesario hacer el new de la clase que sea para que realmente la variable tenga contenido.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #7 (permalink)  
Antiguo 05/03/2014, 06:34
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: NullPointerException

Hola chuidiang, gracias por la respuesta. Mi problema es el siguiente:

En una clase (estacion) instancio 1 objeto ruta y otro objeto point hacie dos NEW. Ruta tiene un atributo del tipo objeto point y lo ke quiero es asociar el point instanciado en station con la ruta instanciada en station.

Como puedo hacer esto?
  #8 (permalink)  
Antiguo 05/03/2014, 06:49
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: NullPointerException

Hola:

El problema cuando haces new Route() que a su vez llama al constructor de su clase padre Path(), es que ahí ya estás intentando usar point1 y point2, pero se los pasas a Route() después del new. La forma de solucionar eso es pasarlos en el constructor

Código Java:
Ver original
  1. public class Route extends Path {
  2.     public Route (Point point1, Point point2) {
  3.           super (point1,point2);
  4.           ....
  5.     }
  6. }

Código Java:
Ver original
  1. public class Path {
  2.    Point point1;
  3.    Point point2;
  4.    public Path (Point point1, Point point2) {
  5.       this.point1 = point1;
  6.       this.point2 = point2;
  7.       if ((true == point1 .... )
  8.    }
  9. }

o bien, no hacer ese if en el constructor. Poner método setPoint(point1, point2) y hacer el if ahí dentro, cuando te pasen los puntos.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #9 (permalink)  
Antiguo 05/03/2014, 11:07
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: NullPointerException

Muchas gracias! Lo prueba en cuanto pueda y te digo.
Un saludo!
  #10 (permalink)  
Antiguo 06/03/2014, 05:46
 
Fecha de Ingreso: julio-2010
Mensajes: 216
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: NullPointerException

Ha funcionado, muchas gracias. Ahora tiene sentido, el constructor se ha ejecutado antes que la asociación de la aguja a la ruta x lo tanto en es emomento está a NULL.

Bien, ahora para ir avanzando me gustaría meter otro concepto más a mi mini-programa para ir aprendiendo más. Ahora me gjustaría meter in INTERFAZ (se en programación procedural), no es objetos.

Un saludo!!

Etiquetas: clase, string
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 18:07.