public RegisteredEventMonitor(Method monitorMethod, Listener listener){
		//Attempt to get the EventMonitor annotation on this method
		EventMonitor monitorAnnotation = monitorMethod.getAnnotation(EventMonitor.class);
		if(monitorAnnotation == null){
			throw new IllegalArgumentException("Monitor method does not have an EventMonitor annotation.");
		}
		//Get the parameter types of the method
		Class<?>[] monitorMethodParameters = monitorMethod.getParameterTypes();
		//Verify that the parameters are valid for an event-monitoring method
		if(monitorMethodParameters.length != 2 || !Event.class.isAssignableFrom(monitorMethodParameters[0]) ||
				!Result.class.isAssignableFrom(monitorMethodParameters[1])){
			//Parameters are invalid, throw exception
			throw new IllegalArgumentException("Monitor method signature is invalid. Cannot accept (Event, Result).");
		}
		//Store the type of the Event-subclass parameter
		eventType = (Class<? extends Event>)monitorMethodParameters[0];
		//Store the monitor method in monitorMethod
		this.monitorMethod = monitorMethod;
		//Make sure that monitor method is accessible
		if(!monitorMethod.isAccessible()){
			monitorMethod.setAccessible(true);
		}
		//Store the listener object in listener
		this.listener = listener;
	}