The approach my team uses for multiple autonomous modes is to choose a mode based on one of the analog input sliders on the driver station (see attachment). Each autonomous mode is encapsulated within a class that inherits from the AutonomousMode base class. In autonomousInit(), we read the value of the first analog slider and then use that number in a switch statement to choose which autonomous class to create an instance of.
Here's last year's code if you're interested (autonomous modes are in the "org.lunatecs316.frc2013.auto" package). The downside to this approach is that you have to remember the numbering of your autonomous modes.