Hi, i am working on a generic RingQueue ADT, however i came across a nullpointer exception during runtime and i cannot figure out what exactly my problem was.

/** Node of a singly linked list of Integer objects*/
public class Node<E>{
	private E element;  // assume elements are Integeregers
	private Node<E> next;
	/** Creates a Node with the given element and next node */
	public Node(E element, Node n){
		this.element = element;
	/** Returns the element of this node */
	public E getElement(){return element;}
	/** Returns the next node of this node */
	public Node getNext(){return this.next;}
	//Modified methods
	/** Sets the element of this node */
	public void setElement(E elem){System.out.println(elem); element = elem;}
	/** Sets the next node of this node */
	public void setNext(Node n){this.next=n;}
public class RingQueue<E> implements Queue<E>{
	private Node<E> head,tail;
	private int size, limit;

	public RingQueue(int s){
		head = tail = null;
		limit = s;		//max size of queue
		size = 0;			//num of elements in queue
		tail = head;

        // other methods omitted ...

	 * Insert an element at the rear of the queue
	 * @param element to be inserted
	 * @exception QueueFullException if queue is full
	public void enqueue (E element) throws QueueFullException{
			throw new QueueFullException("Queue already full");
				tail = tail.getNext();
			tail.setElement(element);  // this line always give me problem
above are my implementation of the RingQ adt, whenever the tail.setElement() method is invoked... or rather the setElement() of Node class is invoked, the program crashes.

Please advise