James finished with 25 points to help the Cavaliers win in another wild finish, returning the favor after Chicago took Game 3 on Derrick Rose's banked three-pointer at the buzzer.
This time, James got whistled for an offensive foul when he elbowed Mike Dunleavy Jr. That led to a tying layup for Rose with just under 10 seconds left.
But instead of going to overtime, James ended it with the jumper from the corner over Jimmy Butler.
Game 5 is Tuesday night in Cleveland.
James committed eight turnovers and struggled again from the field, hitting 10 of 30 shots. He is 18 for 55 the last two games. But he also had 14 rebounds and eight assists.
Kyrie Irving, playing with a sore foot, was two for 10 and had 12 points and two assists.
Timofey Mozgov had 15 points and nine rebounds. J.R. Smith came on strong down the stretch, scoring all but two of his 13 in the fourth quarter.
Rose scored 31 points and Butler added 19 for Chicago, which was playing without Pau Gasol. He sat out because of a strained left hamstring, and his status for Game 5 is in question.
Rose hit two free throws with 1:32 remaining to make it 82-79, but he missed a three-pointer with about a minute remaining after Joakim Noah took a charge against James.
Cleveland's superstar then hit two free throws to make it a five-point game.
Butler made a three with 27 seconds left to cut it to 84-82.
The Cavaliers called a timeout with 21.2 seconds left and burned two more timeouts trying to inbound it. They finally got the ball to James, who then got whistled for elbowing Dunleavy.
Rose drove for a tying layup with 9.4 seconds left.
James had a layup blocked, but he made a fadeaway jumper off a feed from Matthew Dellavedova with Butler closing in on him.