public void actionPerformed(ActionEvent e) {
        boolean hasNext = rIterator.hasNext();
        if(!hasNext) {
            if(!process.isRunning()) {
                stop();
            }
            return;
        }
        if(hasNext) {
            Pair<Crossing, Crossing> pair = rIterator.next();
            gui.setRunnerCrossing(pair.getKey());
            gui.setRunnerDestination(pair.getValue());
        }

        LinkedList<Crossing> c = new LinkedList<Crossing>();
        for(ListIterator<Pair<Crossing,Crossing>> iter : cIterators) {
            if(iter.hasNext()) {
                c.add(iter.next().getKey());
            } else if(hasNext) {
                if(iter.hasPrevious()) {
                    iter.previous();
                    c.add(iter.next().getKey());
                }
            }

        }
        if(gcIterator.hasNext()) {
            Clue clue = gcIterator.next();
            gui.setGlobalClue(clue);
        }
        gui.setCatchersCrossings(c);
        gui.showEditedMap();
    }