private void start() {
        List<AbstractStartingHand> startingHands = Arrays.asList(simulationStarter.getStartingHands());

        if (areAllHandsEmpty(startingHands)) {
            openAllHandsAreEmptyErrorDialog();
            return;
        }
        
        int numberOfThreads = gui.getSettings().getNumberOfThreads();
        FiveCardBoard board = simulationStarter.getBoard();
        int numberOfSimulations = simulationStarter.getNumberOfSimulations();

        AbstractPokerHandSimulator simulator;
        
        simulator = createSimulatorObject(board, startingHands, numberOfSimulations);

        SimulationResult result = null;

        simulationStarter.getDialog().dispose();         
        try {
            result = simulator.performSimulation(numberOfThreads);
        } catch (InterruptedException ex) {
            createSimulationInterruptedErrorWindow();
        }

        if (result != null) {
            outputResults(result, startingHands);
        }
    }