开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜