Strange Null pointer exception with InputStreams
Hey guys, I am working on a final project in my computer science class. Its a going to be a very simple real time simulation of an airline system. I just started, so most of this is still place holder code, and it is still uncommented and terrible so don't be too harsh yet, but I am getting a very strange null pointer exception error. I've added debug lines to the output so you can see it happening.
you can grab the source code as is right now here.
Basically, the class fileManager() recursively loops through the folders and finds all the .inis and places them in a linked list. The constructor of renderingArea() then populates a city[] based on the # of .inis and the default values they have. I'm getting a null pointer exception error when I try to pass the location of the file plane.ini to the constructor for the class plane() as an InputStream. Can anyone help?
class renderingArea extends JPa开发者_开发问答nel {
public fileManager files;
public city[] cities;
public renderingArea(){
// ... other code
for( loop through all files in fileManager ){
File current = files.ini.get(i);
if(current.getName().contains("city")){
try{
InputStream cityStream = files.getResource(current.getName());
InputStream planeStream = files.getResource("plane.ini");
cities[index] = new city( cityStream, planeStream);
cityStream.close();
planeStream.close();
index++;
} catch (Exception e) {
e.printStackTrace();
}
}
}
for( city current : cities){
current.setCities(cities);
}
}
// ============== Class City ========================
public class city {
private final String[] keys = {"x","y","name","population","planes_in_hanger"};
public float x;
public float y;
public int population;
public String name;
private Queue<passenger>[] waiting_passengers; // queue[] parallel to cities.
private Queue<plane> planes_in_hanger; // a queue is a first in first out ADT. Standard ops apply
private city[] cities;
private IniReader ini;
public city(InputStream inStream, InputStream inStreamPlane) throws IOException, FileNotFoundException {
System.out.println("city: " + inStream.toString());
System.out.println("plane: " + inStreamPlane.toString());
ini = new IniReader();
ini.load(inStream);
// .... Other Code
if(ini.properties.containsKey("planes_in_hanger")){
try{
for( int i = 0; i < Integer.parseInt(ini.properties.getProperty("planes_in_hanger")); i++){
System.out.println("iter: "+i);
System.out.println("plane: "+inStreamPlane.toString());
planes_in_hanger.enqueue(new plane(inStreamPlane));
}
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
}
public class plane {
private final String[] keys = {"x","y","max_velocity","passengers"};
public float x;
public float y;
public float max_velocity;
private float x_velocity;
private float y_velocity;
public city destination;
private passenger[] passengers;
public int max_passengers;
private IniReader ini;
//====================== CLASS PLANE ======================
public plane(InputStream inStream) throws IOException, FileNotFoundException{
ini = new IniReader();
ini.load(inStream);
//rest doesn't matter
}
ouput:
//debug stuff, cutting to exception
java.lang.NullPointerException at city.(city.java:72) at renderingArea.(flight_optimizer.java:70) at flight_optimizer_GUI.(flight_optimizer.java:103) at flight_optimizer.main(flight_optimizer.java:37) Exception in thread "main" java.lang.NullPointerException at renderingArea.(flight_optimizer.java:80) at flight_optimizer_GUI.(flight_optimizer.java:103) at flight_optimizer.main(flight_optimizer.java:37)
You don't seem to be initializing a new planes_in_hanger anywhere but you declare it at the top. This could possibly be your issue?
private Queue<plane> planes_in_hanger = new Queue<plane>();
Or you can just initialize it in that method.
精彩评论