private void setUpMenu() {
        // Create menu bar. (We can set color later)
        menuBar = new JMenuBar();
        
        // Add items to the Menu Bar
        chat = new JMenu("Chat");
        chat.setMnemonic(KeyEvent.VK_C);
        chat.getAccessibleContext().setAccessibleDescription("Main chat menu");
        menuBar.add(chat);
        
        // Items in the chat menu
        // New chats
        chatNewConvo = new JMenuItem("Single Conversation");
        // Add keystroke CTRL-S
        chatNewConvo.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
                ActionEvent.CTRL_MASK));
        // Action Listener
        chatNewConvo.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // If the contactListModel is empty there's no one to chat with and
                // print a message dialog
                if (contactListModel.isEmpty()) {
                    JOptionPane
                    .showMessageDialog(
                            frame,
                            "I'm sorry, there are no other users logged on right now.",
                            "No Users Online",
                            JOptionPane.PLAIN_MESSAGE);
                }
                // Otherwise figure out which contacts you can have a convo with and
                // input them into a request user input dialog
                else {
                    String[] possibleConvos = new String[contactListModel
                                                         .getSize()];
                    int index = 0;
                    for (int i = 0; i < contactListModel.getSize(); i++) {
                        String user = (String) contactListModel.toArray()[i];
                        
                        if (!usernameToChats.containsKey(user)) {
                            possibleConvos[index] = user;
                            index++;
                        } else {
                            if (!usernameToChats.get(user).isVisible()) {
                                possibleConvos[index] = user;
                                index++;
                            }
                        }
                    }
                    
                    // If this is at least one person online that you are not talking with
                    if (index > 0) {
                        String[] listOfPossibleConvos = new String[index];
                        for (int j = 0; j < index; j++) {
                            listOfPossibleConvos[j] = possibleConvos[j];
                        }
                        
                        // Show Input Dialog with the available options
                        String requestedUser = (String) JOptionPane
                                .showInputDialog(
                                        frame,
                                        "Who would you like to talk with:\n",
                                        "Open New Conversation",
                                        JOptionPane.PLAIN_MESSAGE, null,
                                        listOfPossibleConvos,
                                        listOfPossibleConvos[0]);
                        
                        // If the requested user is null or empty do nothing
                        if ((requestedUser != null) && (requestedUser.length() > 0)) {
                            // If the user already had an open chat, reopen that chat.
                            if (usernameToChats.containsKey(requestedUser)) {    
                                usernameToChats.get(requestedUser).setVisible(true);
                            }
                            // Otherwise, make a new chat.
                            else {
                                ConversationView answer = new ConversationView(
                                        clientModel, username,
                                        requestedUser);
                                usernameToChats.put(requestedUser, answer);
                                answer.setVisible(true);
                            }
                        }
                    } 
                    // If we get here, this means that all the users online already have
                    // open convos with you. Displays a message dialog accordingly.
                    else {
                        JOptionPane
                        .showMessageDialog(
                                frame,
                                "You already have conversations open with all the users online",
                                "No New Conversations Availiable",
                                JOptionPane.PLAIN_MESSAGE);
                    }
                }
            }
        });
        // Add chatNewConvo to the top menu
        chat.add(chatNewConvo);
        
        // Exit
        chat.addSeparator();
        chatExit = new JMenuItem("Exit");
        // Set keystroke to CTRL-E
        chatExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,
                ActionEvent.CTRL_MASK));
        // Add action listener
        chatExit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // Prompt the user to see if they really want to exit.
                int result = JOptionPane.showConfirmDialog(frame,
                        "Are you sure you want to exit the application?",
                        "Exit Application", JOptionPane.YES_NO_OPTION);

                if (result == JOptionPane.YES_OPTION) {
                    try {
                        // If YES, release the user
                        clientModel.releaseUser();
                        frame.setVisible(false);
                        frame.dispose();
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }
            }
        });
        // Add it to the top menu
        chat.add(chatExit);

        // Build the Help Menu
        help = new JMenu("Help");
        help.setMnemonic(KeyEvent.VK_H);
        help.getAccessibleContext().setAccessibleDescription("Help Menu");
        menuBar.add(help);
        
        // Items in the help menu
        // Contents
        helpContents = new JMenuItem("Contents");
        helpContents.setMnemonic(KeyEvent.VK_T);
        // On click, displays info about the program.
        helpContents.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(frame,
                            "This is a simple peer to peer chat client. To begin a chat\n"
                          + "either double click on one of the users online. You can also\n"
                          + "start a conversation by going to the File menu and selecting\n"
                          + "new conversation. We hope you enjoy our program!",
                            "Contents", JOptionPane.INFORMATION_MESSAGE);
            }
        });
        help.add(helpContents);
        // About
        helpAbout = new JMenuItem("About");
        helpAbout.setMnemonic(KeyEvent.VK_F1);
        // On click, display the about
        helpAbout.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JOptionPane
                        .showMessageDialog(
                                frame,
                                "Created by Dennis Smiley, Rohan Mahajan, and Andrew Dorne\n"
                                        + "for a 6.005 Project in Spring of 2012 at MIT.",
                                "About", JOptionPane.INFORMATION_MESSAGE);
            }
        });
        help.add(helpAbout);

        // Add the menu bar to the frame
        setJMenuBar(menuBar);
    }