private void startGame() {
        if (!gameActive) {
            gameActive = true;
            // Start the timer
            gameTimer.schedule(new TimerTask() {
                /** Update the game by moving all objects as needed. The timer
                 *  fires every interval defined in TIMERINTERVAL.
                 */
                public synchronized void run() {
                    paddle.update();
                    for (Iterator<Ball> iterator = balls.iterator();
                            iterator.hasNext();) {
                        Ball x = iterator.next();
                        x.update();
                        // See if the ball needs to be removed.
                        if (x.getY() > BrickBreaker.GAMEHEIGHT) {
                            // The ball is off of the screen
                            // WARNING!!! THIS WILL BREAK IF THE COLLECTION'S
                            // ITERATOR DOES NOT SUPPORT REMOVE.
                            iterator.remove();
                            continue;
                        }
                        // Check if the Ball hit the Paddle and update accordingly.
                        paddle.hitBall(x);
                    }
                    //System.out.println(String.format("%d Balls in play.", balls.size()));
                    //balls.removeAll(toRemove);
                    if (balls.isEmpty()) {
                        gameActive = false;
                        this.cancel();
                    }
                }
            },
            0L, // Start immediately
            BrickBreaker.TIMERINTERVAL
            );
        }
    }