Java - Nuevo problema con una clase

 
Vista:

Nuevo problema con una clase

Publicado por Laguna (8 intervenciones) el 15/04/2008 10:21:29
Hola, sigo con las prácticas en java con eclipse, y me ha surgido un nuevo problema. Tengo una clase llamada Vehicle donde hay una serie de campos, pues bueno, declaro un objeto de la clase vehicle pero cuando quiero asignarle un valor al campo, después de haber reservado la memoria, me da un error que dice nullpointerexception local variables unavailable, después d probarlo mucho llevo desde ayer atrancado y no sé por qué puede ser. Aquí os dejo el código... del cuál he omitido algunas partes

package services;

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Graphics;
import java.awt.Image;
import java.util.*;
import applet.Simulation;

public class SimulationServices extends Applet {

private static final long serialVersionUID = 1L;

/**
* Vehicle es al clase que gestiona la funcionalidades de los vehiculos
* en la simulacion
*/

/*************************************************************************/
// Esta es la clase que da problemas
/*************************************************************************/

class Vehicle {

/**
* Coordenada x del vehiculo
*/
private double x;

/**
* Coordenada y del vehiculo
*/
private double y;

/**
* Carretera por las que circula el vehiculo:
* 0: carretera horizontal (X)
* 1,2,3: carreteras verticales (Y)
*/
private int road;

/**
* Desplazamiento de la coordenada x del vehiculo en el ultimo
* movimiento
*/
private double dx;

/**
* Desplazamiento de la coordenada y del vehiculo en el ultimo
* movimiento
*/
private double dy;

/**
* Etiqueta que identifica el vehiculo
*/
private String label;

/**
* Ancho del vehiculo
*/
private int wideV;

/**
* Largo del vehiculo
*
*/
private int longV;

/**
* Constructor de la clase Vehicle
* inicializa los componentes de Vehicle
*/
public Vehicle(double x, double y, int road, String label, int wideV,
int longV) {
this.x = x;
this.y = y;
this.road = road;
this.label = label;
this.wideV = wideV;
this.longV = longV;
}


}

/**
* Guarda la referencia a la instancia unica de la clase de simulacion
* SimulationServices para cumplir el patron de singleton
*/
private static SimulationServices instanceSimulation = null;

// creador sincronizado para protegerse de posibles problemas multi-hilo
// otra prueba para evitar instantiación múltiple
private synchronized static void createInstance() {
if (instanceSimulation == null) {
instanceSimulation = new SimulationServices();
}
}

/**
* Constructor de la clase SimulationServices
* inicializa los componentes de SimulationServices.
* Se hace privado para seguir el patron de singleton
*/
private SimulationServices() {
// se crea la matriz de vehiculos de la simulacion


for (int i = 0; i < 3; i++) {
// se calcula las posiciones eje x carreteras verticales
xPosRoadY[i] = 150 * (i + 1);

// se calcula la porciones correspondientes a los cruces de las
// carreteras verticales
xPosRightCrossRoadX[i] = xPosRoadY[i] + VEHICLE_LENGTH;
xPosLeftCrossRoadX[i] = xPosRoadY[i] - VEHICLE_LENGTH;

// en principio los cruces se marcan como libres
blockedCross[i] = 0;
}

// se calculan las posiciones de las carretas verticales
for (int i = 0; i < 3; i++) {
xPosLeftRoadY[i] = xPosRoadY[i] - VEHICLE_WIDTH;
xPosRightRoadY[i] = xPosRoadY[i] + VEHICLE_WIDTH;
}
}

/**
* Devuelve la instancia de la simulacion, esto es,
* la instancia de la clase SimulationServices unica existente.
* Si dicha instancia no existe la construye, si ya existe la devuelve.
* Este metodo asegura por tanto que solo va a haber una instancia de
* la simulacion, que por tanto, va aseguir el patron de singleton.
*
* @return instanceSimulation
* unica existente en la simulacion, si no existe la crea
*/
public static SimulationServices getInstaceSimulation() {

if (instanceSimulation == null) createInstance();
return instanceSimulation;

}

/**
* Busca el vehiculo identificado por la etiqueta de entrada y si no existe
* lo anade a la simulacion mediante el metodo addVehicle
*
* @param label
* identifica el vehiculo a buscar
* @return posicion que ocupa el vehiculo a buscar en la
* matriz de vehiculos de la simulacion
*/
public int findVehicle(String label) {

int i, aux=0;

for (i=0; i<nVehicules; i++){
if (vehicles[i].label == label)
aux = i;
}

if (aux == 0){
addVehicle(label);
return -1;
}
else
return aux;


}

/**
* Anade el vehiculo identificado por la etiqueta de entrada a la simulacion
* (matriz de vehiculos correspondiente)
*
* @param label
* identifica el vehiculo a anadir
* @return nVehicules
* numero de vehiculos existentes en la simulacion
* tras incorporar el vehiculo de entrada
*/
private int addVehicle(String label) {

// Tener en cuenta como se deben
// establecer los valores iniciales del objeto Vehicle:
// road = azar entre 0 (horizontal)y 1,2,3 (verticales)
// wideV,longV = ctes. correspondientes
// label = parametro label
// Si es la carretera horizontal:
// x = 480 + 210 * azar
// y = yPosRoadX
// Otro caso
// x = xPosRoadY[correspondiente a su carretera];
// y = 10 + 100 * azar;
//Vehicle n;
Random rand = new Random();
Vehicle vehicles_aux[];
int j;


//private Vehicle vehicles[];
//vehicles = new ThreadVehicle ("Vehicle" + i, i);

vehicles_aux = new Vehicle [nVehicules];
for (j=0; j<nVehicules; j++)
vehicles_aux[j] = vehicles[j];

vehicles = new Vehicle [nVehicules+1];
for (j=0; j<nVehicules; j++)
vehicles[j] = vehicles_aux[j];


/********************************************/
// Aquí me da el error
/********************************************/

vehicles[0].road = 1;
//vehicles = new Vehicle [nVehicules+1];
vehicles[nVehicules].road = rand.nextInt(4);
vehicles[nVehicules].wideV = VEHICLE_WIDTH;
vehicles[nVehicules].longV = VEHICLE_LENGTH;
vehicles[nVehicules].label = label;

if (vehicles[nVehicules].road == 0){
vehicles[nVehicules].x = 480 + 210 * vehicles[nVehicules].road;
vehicles[nVehicules].y = yPosRoadX;
}
else{
vehicles[nVehicules].x = xPosRoadY[vehicles[nVehicules].road];
vehicles[nVehicules].y = 10 + 100 * vehicles[nVehicules].road;
}

nVehicules = nVehicules + 1;

return nVehicules;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Nuevo problema con una clase

Publicado por hadrien (25 intervenciones) el 15/04/2008 16:25:39
No me cuadra esto: vehicles_aux = new Vehicle [nVehicules];
Debería ser: Vehicle vehicles_aux[] = new Vehicle [nVehicules];

A ver si te funciona.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Nuevo problema con una clase

Publicado por laguna (8 intervenciones) el 19/04/2008 09:35:42
Buenas, para el programa que estábamos haciendo le pregunté a una amiga y me dijo que lo reservara estático así que al final nada de dinámico, y la asignación que me daba error era porque había que hacer una función consultar el valor de x que devolviera esta x y no lo sabía. Bueno ya me dará otro error por ahí y volveré a preguntaros :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar