Blackburn Rovers 0 Manchester City 0
It meant that the two sides, both in a rich vein of form, cancelled each other out on a day when Rovers made mathematically certain of Premiership survival.
James denied Stead with a smart save in the first half and then pulled off an acrobatic effort to keep out the England Under-21 star late on as Blackburn had the better of the second half.
Having conceded only once in their last eight Premier League matches, Blackburn are building a reputation as a resolute defensive unit and there was nothing the likes of Robbie Fowler and Shaun Wright-Phillips could do to put a dent in Rovers resolve.
Blackburn opened the brighter of the two with Lucas Neill firing just wide before Fowler tested Brad Friedel with a shot from long range.
Joey Barton might have done better for the visitors when he raced through on goal but he chose to shoot from distance when there were perhaps better options either side.
City had claims for a penalty in the 28th minute when a clumsy challenge by Dominic Matteo sent Wright-Phillips sprawling, but referee Chris Foy was unimpressed.
City had the ball in the net via a Blackburn defender but the effort was quite rightly cancelled out after Fowler had been found guilty of a clear push.
After a fairly tedious opening half Rovers upped the tempo and started to ask questions of a City defence in which James and Sylvain Distin were outstanding.
Brett Emerton brought a good save from James when he met a corner from Morten Gamst Pedersen while Andy Todd, the Rovers skipper, was only just too high from another Pedersen corner.
Matteo, very strong and solid at full-back, had a shot deflected which James did well to save at the second attempt with Stead sliding in hopefully, but failing to make contact when the ball broke free.
Blackburn's dominance continued with both Ryan Nelsen and Steven Reid heading wide from set-piece situations.
City had another claim for a penalty waved away when Neill appeared to bundle over Antoine Sibierski.
The City striker was incensed, but both referee and his assistant were in the perfect position to make their decision.
After Stead had been denied yet again by James the game started to fizzle out, although there was still time for Aaron Mokoena to get possession in a promising position only to miscue his shot on an afternoon of missed opportunities.
Man of the Match: David James - Often criticised for unfortunate errors, James was at his best - just ask Jonathan Stead.