I've put together a fairly reliable NMEA parsing app, but it has a bit of overhead, due to having to hold my serial controller's hand... the Serial controller that came with my GPS likes to blue screen windows, if you try to read data as soon as its dropped in the buffer... for some reason, it like the data to sit in the buffer for atleast 100ms... I havn't been able to figure out a good way around it, other than manually "aging" the data in the buffer, and checking to see if the data is atleast 100ms old before polling the buffer.
but in any sense; for most of my resources, I used:
http://www.gpsinformation.org/dale/nmea.htm
about 90% of the info in there is accurate. I can't speak for Java, but in Visual Basic, parsing the info was very easy. Only thing to remember, is the lat and lng that you get from GGA, RMC, and GLL are not in a "standard" format..
When you are done with the NMEA parsing function, I'd love to see how you managed the logic, on a per-command basis!
thanks
Mike