Why does ButtonListener extend GPACalculator? Not only does that relationship make zero sense, it's also causing your problem. Every time GPACalculator is instantiated, it instantiates a ButtonListener, which is, of course, a GPACalculator, and what happens when a GPACalculator is instantiated? Infinite unbounded recursion, that is, the same thing keeps calling itself over and over again forever, until your JVM runs ...