I am building an application that is using A Star to calculate a route between two rooms. However I have run into an NullPointrException when I test the algorithm. This is my Vertex class:
Vertex.java
package testalgo;
import java.util.ArrayList;
public class Vertex {
    /**
     * @param args
     */
    int vertexNumber;
    int x;
    int y;
    public Vertex(int vertNum, int x,int y){
        vertexNumber = vertNum;
        this.x = x;
        this.y = y;
    }
    public int getVertexNum(){
        return vertexNumber;
    }
    public int getX(){
        return x;
    }
    public int getY(){
        return y;
    }
    public double distanceTo(Vertex other){
        return Math.sqrt( Math.pow( x -other.x, 2) + Math.pow( y- other.y,2) );
    }
}
This my Graph class:
Graph.java
package testalgo;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Graph
{   
        static ArrayList<Vertex> vertices = new ArrayList<Vertex>();
       static HashMap<Integer, LinkedList<Integer>> adj =new   HashMap<Integer, LinkedList<Integer>>();
       static Vertex v;
       static Scanner sc;
        public Graph(ArrayList<Vertex> verts ){ 
            }
        public static void addVertextToVertices(Vertex v1){
            vertices.add(v1);
        }
        public static void addVertex(int vertexNumber)
        {
          adj.put(vertexNumber, new LinkedList<Integer>());
        }
        public static  void addEgde(int vertexIndex, int vertexIndex2) {
            adj.get(vertexIndex).add(vertexIndex2);
        }
        public static List<Integer> getNeighbors(int v) {
            return adj.get(v);
        }
}
And this is my AStar class
AStar.java
package testalgo;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
public class AStar {
    static Vertex v;
    static Graph g;
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Vertex a = new Vertex(1, 796, 629);
        Vertex b = new Vertex (2, 1424, 479);
        Vertex c = new Vertex (3, 1484,480 );
        Vertex d = new Vertex (4,922, 386);
        Vertex e = new Vertex (5, 919, 311);
        Vertex f = new Vertex (6, 563, 286);
        Vertex g1 = new Vertex (7,507, 283);
        g.addVertextToVertices(a);
        g.addVertextToVertices(b);
        g.addVertextToVertices(c);
        g.addVertextToVertices(d);
        g.addVertextToVertices(e);
        g.addVertextToVertices(f);
        g.addVertextToVertices(g1);
        g.addVertex(g.vertices.indexOf(a));
        g.addVertex(g.vertices.indexOf(b));
        g.addVertex(g.vertices.indexOf(c));
        g.addVertex(g.vertices.indexOf(d));
        g.addVertex(g.vertices.indexOf(e));
        g.addVertex(g.vertices.indexOf(f));
        g.addVertex(g.vertices.indexOf(g1));
        g.addEgde(g.vertices.indexOf(a),g.vertices.indexOf(b));
        g.addEgde(g.vertices.indexOf(b),g.vertices.indexOf(a));
        g.addEgde(g.vertices.indexOf(a),g.vertices.indexOf(e));
        g.addEgde(g.vertices.indexOf(e),g.vertices.indexOf(a));
        g.addEgde(g.vertices.indexOf(b),g.vertices.indexOf(g1));
        g.addEgde(g.vertices.indexOf(g1),g.vertices.indexOf(b));
        g.addEgde(g.vertices.indexOf(c),g.vertices.indexOf(g1));
        g.addEgde(g.vertices.indexOf(g1),g.vertices.indexOf(c));
        g.addEgde(g.vertices.indexOf(c),g.vertices.indexOf(d));
        g.addEgde(g.vertices.indexOf(d),g.vertices.indexOf(c));
        g.addEgde(g.vertices.indexOf(d),g.vertices.indexOf(e));
        g.addEgde(g.vertices.indexOf(e),g.vertices.indexOf(d));
        g.addEgde(g.vertices.indexOf(e),g.vertices.indexOf(f));
        g.addEgde(g.vertices.indexOf(f),g.vertices.indexOf(e));
        g.addEgde(g.vertices.indexOf(f),g.vertices.indexOf(g1));
        g.addEgde(g.vertices.indexOf(g1),g.vertices.indexOf(f));
        System.out.println(g.getNeighbors(g.vertices.indexOf(a)));
        System.out.println(g.getNeighbors(g.vertices.indexOf(b)));
        System.out.println(g.getNeighbors(g.vertices.indexOf(c)));
        System.out.println(g.getNeighbors(g.vertices.indexOf(d)));
        System.out.println(g.getNeighbors(g.vertices.indexOf(e)));
        System.out.println(g.getNeighbors(g.vertices.indexOf(f)));
        System.out.println(g.getNeighbors(g.vertices.indexOf(g1)));
        findPath(a, e);// This is line 90
    }
    public static List<Node> findPath(Vertex start, Vertex goal){
        List<Node> open = new ArrayList<Node>();
        List<Node> closed = new ArrayList<Node>();
        Node start_Node = new Node (start,null, 0.0, v.distanceTo(goal)); // This is line 99
        open.add(start_Node);
        while(open != null){
            Collections.sort(open, sortNodes);
            Node current = open.get(0);
            if(current.v == goal){
                List<Node> path = new ArrayList<Node>();
                while(current.parent != null){
                    path.add(current);
                    current = current.parent;
                }
                open.clear();
                closed.clear();
                return path;
            }
            open.remove(current);
            closed.add(current);
            List<Integer> neighbours =g.getNeighbors(g.vertices.indexOf(current.v));
            for (int i=0; i<neighbours.size(); i++){
                Vertex currentV = g.vertices.get(neighbours.get(i));
                double g = current.g + current.v.distanceTo(currentV);
                double h = currentV.distanceTo(goal);
                Node succesor = new Node (currentV,current, g, h);
                //succesor.setParent(current);
                if(hasVertex(closed, succesor.v) && g >= succesor.g){
                    continue;
                }
                if(!hasVertex(open, succesor.v) || g < succesor.g){
                    open.add(succesor);
                }
                open.remove(succesor);
                closed.remove(succesor);
                succesor.parent= current;
                double f= succesor.g + succesor.h;
                open.add(succesor);
            }
        }
        closed.clear();
        return null;
    }
    private static boolean hasVertex(List<Node> list, Vertex vertex  ){
        for(Node n: list){
            if(n.v.equals(vertex))
                return true;
        }
        return false;
    }
    private double calculateH(Node current){
        return Math.sqrt( Math.pow(current.v.getX(), 2) + Math.pow( current.v.getY(),2) );
    }
    private static Comparator<Node> sortNodes = new Comparator<Node>(){
        public int compare(Node n0, Node n1) {
            if(n1.f < n0.f)
                return +1;
            if(n1.f < n0.f)
                return -1;  
            return 0;
        }
    };
}
This is the error I'm getting
Exception in thread "main" java.lang.NullPointerException
    at testalgo.AStar.findPath(AStar.java:99)
    at testalgo.AStar.main(AStar.java:90)
Thank you for all your help!
 
    