Il se fait connaître avec des rôles d'adolescents geek dans des comédies à succès des années 1980 : Seize bougies pour Sam (1984), The Breakfast Club (1985) et Une créature de rêve (1985). Ne voulant pas être enfermé dans ce type de rôle, il refuse le rôle de Cameron Frye dans La Folle Journée de Ferris Bueller (1986). Il se voit proposer le rôle principal dans Full Metal Jacket (1987) mais un accord financier ne peut être trouvé et il doit y renoncer. Il aborde des registres différents dans Edward aux mains d'argent (1990) et Six degrés de séparation (1993). Il n'apparaît ensuite que dans des seconds rôles ou des films à petit budget jusqu'à son retour au premier plan en interprétant le rôle principal dans la série télévisée Dead Zone de 2002 à 2007. Il apparaît ensuite dans un rôle secondaire dans The Dark Knight : Le Chevalier noir (2008).