The boy was taken into custody and questioned by police while Normal Community High School's more than 1,800 students were evacuated to a nearby church where parents could pick them up, Normal police chief Rick Bleichner said.
Investigators weren't sure how the handgun was brought to school or why, and as far as they knew no one in particular was targeted, Bleichner said.
A student who was in the classroom said the gunman walked to the front of the room and pulled the gun, a hatchet, a canteen he said was full of kerosene and a bottle of what he said were painkillers out of a backpack.
"I heard the teacher say 'Please, no!' So I looked up and he had pulled out a weapon and pistol, and said, 'Now it's time for you guys to listen to me,'" Sean Kennedy, who also is 14, told WGLT radio in Bloomington.
Both Bleichner and Kennedy said a few students managed to slip out of the room, and Kennedy said that led the shooter to fire the first shot into the ceiling. The shooter told at least one student he wouldn't hurt them, Kennedy said, and after lining the remaining students up against a wall complained that no one was willing to listen to him about unspecified problems. The shooter then set the gun down and turned away from it.
"My teacher, he stood up and ran, grabbed the gun and then (the shooter) jumped on top of the teacher's back," Kennedy said, adding that a second shot was discharged during the struggle.
Officers who entered the classroom just after 8 a.m. after receiving a number of 911 calls found the teacher, whose name was not released, had the student under control, Bleichner said.
"How he obtained that weapon, we're still investigating that," the police chief said.
Parents were told about the incident through the school's electronic alert system and told later in the morning to pick up their children at the church, a process that took several hours because the school required parents to show photo identification and sign each child out of school, McLean County Unit District No. 5 Superintendent Gary Niehaus said. Those who couldn't be picked up were being bused home late in the afternoon.
Classes in the school district's other five schools went on Friday afternoon, but the Normal Community campus remained closed as a crime scene, according to the school district's website. Students were allowed to retrieve cars still parked at the school but were expected to be able to gather belongings inside later. A football game scheduled for Friday night was moved to Saturday.
Classes at Normal Community are expected to resume Monday, Niehaus said, and potential changes such as the addition of metal detectors already were being discussed. He also said he hoped everyone from students and teachers to parents would help prevent any repeat of Friday.
"I want every parent to check a book bag when they go in, I want every student to be curious about what's in someone else's book bag and I want my teachers and staff to feel that they have my backing if they feel the need to search (a backpack)," he said.
Information from: WGLT-FM.