Background:
I am suppose to be working on a group project for school using Bluej, but guess who's stuck doing all the work? That's right, me. Well, I have the program (a game of Hangman) nearly complete. There are plenty of bugs to still be worked out, but there is one in particular that I cannot figure out how to solve.

Question:
How do you end a console program? I've tried System.exit(0) in varias places in my code, as well as letting the program go back to the drive and have nothing else to execute. In both ways I've tried the window will not close (even if you try to press the X at the top). So is there something I'm messing up on or not understanding? Any help would be appreciated.

Code:
Below are my Driver and StartGame class, which I believe are the source of the problem. If I'm incorrect (quite possible), just let me know and post the rest of the code (which is a lot, why I only posted these two classes).

Driver Class:
Code:
/**
 * Driver class for Hang Man.
 */
public class Driver
{
    public static void main()
    {
        StartGame game = new StartGame();
        game.mainMenu();
    }
}
StartGame Class:
Code:
import java.io.*;               //Needed for file operations
import java.util.Scanner;       //Needed for user input

/**
 * All the menus and game options are called through this class.
 */
public class StartGame
{
    private Scanner input = new Scanner(System.in);     //Scanner object to receive user input
    
    private HangMan man;                                //HangMan object for the game
    private Player player1;                             //Player object for player 1
    private Player player2;                             //Player object for player 2
    private Solver ai;                                  //AI that guesses a user's word

    private Menu mainMenu = new Menu(1);                //The main menu
    private Menu setUpMenu = new Menu(2);               //The game set-up menu
    private Menu gameMenu = new Menu(3);                //The in-game menu
    
    private int choice;                                 //User input

    
    /**
     * Displays the main menu and loads the next action based on user input.
     */
    public void mainMenu()
    {
        choice = mainMenu.display();
        
        switch(choice)
        {
            case 1: setUpMenu();
                    break;
            case 2: try{ loadSVG("SVG.txt"); }
                    catch(Exception e) 
                    { mainMenu(); }
                    break;
            case 3: System.exit(0);
                    break;
        }
    }
    
    /**
     * Displays the game set-up menu and loads the next action based on user input.
     */
    private void setUpMenu()
    {
        String p1Name = "", p2Name = "", word = "", me = "";
        boolean end = false;
        int diff = -1;
        
        choice = setUpMenu.display();
        
        switch(choice)
        {
            case 1: System.out.println("Enter player name that will guess a word: ");
                    p1Name = input.nextLine();
                    player1 = new Player(p1Name, true);
                    System.out.println("Enter next player's name: ");
                    p2Name = input.nextLine();
                    player2 = new Player(p2Name, false);
                    System.out.println("Enter the word to be guessed: ");
                    word = input.nextLine();
                    newGame(word);
                    gameMenu();
                    break;
            case 2: System.out.println("Enter your name: ");
                    me = input.nextLine();
                    player1 = new Player(me, true);
                    player2 = new Player("Computer", false);
                    System.out.println("Enter a difficulty (1-3): ");
                    while(!end)
                    {
                        diff = input.nextInt();
                        if(diff > 0 && diff <= 3)
                            end = true;
                    }
                    newGame(diff);
                    gameMenu();
                    break;
            case 3: System.out.println("Enter word for the computer to guess: ");
                    word = input.nextLine();
                    ai = new Solver(word);
                    ai.run();
                    break;
            case 4: mainMenu();
                    break;
        }
    }
    
    /**
     * Displays the in-game menu and loads the next action based on user input.
     */
    private void gameMenu()
    {
        String letter = "", word = "", answer = "", w2bg = "";
        boolean end = false;
        int diff = 0;
        
        gameMenu.clearScreen();
        
        player1.display();
        System.out.println();
        player2.display();
        man.displayBoard();
        choice = gameMenu.display();
        
        switch(choice)
        {
            case 1: while(!end)
                    {
                        letter = input.nextLine();
                        if(letter.length() == 1)
                            end = true;
                    }
                    if(man.isInWord())
                        man.addToCurrentWord();
                    else
                        man.addToGuesses();
                    man.displayBoard();
                    break;
            case 2: word = input.nextLine();
                    if(man.wordsMatch(word))
                    {
                        System.out.print("You Win!!");
                        if(player1.isGuesser())
                            player1.addToScore();
                        else
                            player2.addToScore();
                        
                        end = false;
                        while(!end)
                        {
                            System.out.println("Would you like to play again?(yes/no)");
                            answer = input.nextLine();
                            if(answer.compareToIgnoreCase("yes") == 0 || answer.compareToIgnoreCase("no") == 0)
                                end = true;
                        }
                        
                        if(answer.compareToIgnoreCase("yes") == 0)
                        {
                            end = false;
                            if(player2.getName().equals("Computer"))
                            {
                                System.out.print("Enter difficulty: ");
                                while(!end)
                                {
                                    diff = input.nextInt();
                                    if(diff > 0 && diff <= 3)
                                        end = true;
                                }
                                newGame(diff);
                            }
                            else
                            {
                                System.out.print("Enter word to be guessed: ");
                                w2bg = input.nextLine();
                                newGame(w2bg);
                            }
                        }
                        else
                            mainMenu();
                    }
                    else
                    {
                        System.out.print("The word " + word + " is not correct.");
                        gameMenu.pressEnterToContinue();
                    }
                    man.displayBoard();
                    break;
            case 3: System.out.println("The word you couldn't guess is: " + man.getWord());
                    gameMenu.pressEnterToContinue();
                    gameMenu();
                    break;
            case 4: createSVG();
                    break;
            case 5: mainMenu();
                    break;
        }
    }
    
    /**
     * Saves the current game's data for later use.
     */
    private void createSVG()
    {
        final File parentDir = new File("Saved Game");      //Parent directory
        final String hash = "SVG";                          //Hash name for new file
        final String fileName = hash + ".txt";              //New file name and type
        Writer writer = null;                               //Used for writing to a file

        //Attempts to make the directory.
        try {
            String saveGameDir = "Saved Game";
            new File(saveGameDir).mkdir();
        }
        //Prints error if it can't
        catch(Exception e)
            { System.err.println("Error: " + e.getMessage()); }

        //Attempts to make new file
        try {
            final File file = new File(parentDir, fileName);
            file.createNewFile();
        }
        //Prints error if it can't
        catch(Exception e)
            { System.err.println("Error: " + e.getMessage()); }

        //Attempts to write the data to the file.
        try {
            writer = new BufferedWriter(new OutputStreamWriter(
                     new FileOutputStream(fileName), "utf-8"));
            writer.write(man.getWord());
            writer.write(man.getCurrentWord());
            writer.write(man.getGuesses());
            writer.write(man.getGuess());
            writer.write(man.getDifficulty());
        }
        //Prints error if it can't
        catch (IOException ex)
        {
            System.err.println("Error: " + ex.getMessage()); 
        }
        //Closes writer
        finally {
            try 
                { writer.close(); }
                
            catch(Exception ex) 
                { System.err.println("Error: " + ex.getMessage()); }
        }
    }

    /**
     * Loads a saved game.
     * 
     * @param pathname      Path to file from current folder.
     */
    private void loadSVG(String pathname) throws IOException 
    {
        //loadSVG variables
        File file = new File(pathname);
        Scanner fromFile = new Scanner(file);

        //Variables for new SaveGame
        String word = "";
        String cWord = "";
        String guesses = "";
        String guess = "";
        int diff = -1;

        //Reads the file and saves it to a string
        try 
        {
            while(fromFile.hasNextLine() && diff == -1)
            {
                word = fromFile.nextLine();
                cWord = fromFile.nextLine();
                guesses = fromFile.nextLine();
                guess = fromFile.nextLine();
                diff = fromFile.nextInt();
            }
        }
        //Closes scanner
        finally
        {
            fromFile.close();
        }

        //Creates a new SaveGame based on taken information
        SVG svg = new SVG(word, cWord, guesses, guess, diff);

        //Loads the saveGame
        man = new HangMan(svg);
    }

    /**
     * Starts a new game.
     * 
     * @param diff        Difficulty setting.
     */
    private void newGame(int diff)
    {
        man = new HangMan(diff);
    }

    /**
     * Starts a new game.
     * 
     * @param word        Predefined word.
     */
    private void newGame(String word)
    {
        man = new HangMan(word);
    }
}