public void run() {
		while (true) {
			try {
				String[] nextCommand;
				try {
					nextCommand = dialogue.getUserInput("Enter command:").split(" ");
				} catch (IOException e) {
					throw new SystemCommandException(
							"Error while reading most recent command.", e);
				}
				
				String commandName = nextCommand[0];
				String[] arguments = Arrays.copyOfRange(nextCommand, 1,
						nextCommand.length);

				SystemCommand<Facade> command = commands.get(commandName);

				if (command == null) {
					command =
							new UnknownSystemCommand<Facade>(facade, dialogue, commandName);
				}
				
				int minimumArguments = getCommandMinimumArguments(command);

				if (arguments == null || arguments.length < minimumArguments)
					throw new SystemCommandException(
							"Invalid number of arguments for command ["
									+ commandName + "].");
				
				command.processCommand(arguments);

			} catch (SystemCommandException e) {
				dialogue.reportSystemError(e);
			}
		}
	}