при отладке весь код спокойно доходит до конца и выполняется, но при обычном запуске программы выдаёт почему то ошибки с чем это может быть связано? и какие советы вы могли бы дать
public int playTheGame() {
        Chessboard chessboard = new Chessboard();

        whiteTurn.setTurnColor("white");
        blackTurn.setTurnColor("black");



        while (mate == 0) {

            getIndex getIndex = new chooseTheIndex();

            Index before = new Index();
            Index after = new Index();

            if (lastTurn.isEmpty()) {

                System.out.println("Первыми ходят белые!");

                before = getIndex.scanIndex();
                after = getIndex.scanIndex();

                chessboard.getBoard().get(before.getIndex()).move(before, after);
                chessboard.printTheBoard();
                whiteTurn.setIndex(after);
                lastTurn.add(whiteTurn);

                return playTheGame();
            }

            if (lastTurn.get(lastTurn.size() - 1) == blackTurn) {

                if(chessboard.getBoard().get(before.getIndex()) instanceof WhiteKing &&
                    chessboard.getBoard().get(after.getIndex()) instanceof WhiteCastle &&
                        whiteCastleAble.castleWithKing(before, after)){
                    ((WhiteKing) chessboard.getBoard().get(before.getIndex())).castlingMove(before, after);
                    return playTheGame();
                }

                // ПРОВЕРКА НА ШАХ
                for (int i = 0; i < chessboard.getBoard().size(); i++) {
                    if (chessboard.getBoard().get(i) instanceof WhiteKing) {
                        if (WhiteCheck.checkIsFound(chessboard.getBoard().get(i).getCoordinate())) {
                            if (!(mateForWhite.mateAble(chessboard.getBoard().get(i).getCoordinate()))) {
                                System.out.println("Шах ходить можно только королём");
                                before = chessboard.getBoard().get(i).getCoordinate();
                                System.out.println("ВЫбирайте координаты хода королём");
                                Index index = new Index();
                                while (after != index) {
                                    for (Index tmp : whiteKingMoves.getKingMoves()) {
                                        after = getIndex.scanIndex();
                                        if (tmp.getIndex() == after.getIndex()) {
                                            chessboard.getBoard().get(before.getIndex()).move(before, after);
                                            index = tmp;
                                            break;
                                        }
                                        return playTheGame();
                                    }
                                }
                            } else {
                                System.out.println("Мат");
                                mate = 1;
                                return playTheGame();
                            }
                        }
                    }
                }

                before = getIndex.scanIndex();
                after = getIndex.scanIndex();

                chessboard.getBoard().get(before.getIndex()).move(before, after);
                chessboard.printTheBoard();
                whiteTurn.setIndex(after);
                lastTurn.add(whiteTurn);

                if (chessboard.getBoard().get(before.getIndex()) instanceof WhitePawn &&
                        chessboard.getBoard().get(after.getIndex()).getCoordinate().getCoordinateY() == 8) {
                    replaceIt.pawnReplacement(before, after);
                    return playTheGame();
                } else if (chessboard.getBoard().get(before.getIndex()) instanceof BlackPawn &&
                        chessboard.getBoard().get(after.getIndex()).getCoordinate().getCoordinateY() == 0) {
                    replaceIt.pawnReplacement(before, after);
                    return playTheGame();
                }
                return playTheGame();
            }
            else if (lastTurn.get(lastTurn.size() - 1) == whiteTurn) {

                if(chessboard.getBoard().get(before.getIndex()) instanceof BlackKing &&
                        chessboard.getBoard().get(after.getIndex()) instanceof BlackCastle &&
                        blackCastleAble.castleWithKing(before, after)){
                    ((BlackKing) chessboard.getBoard().get(before.getIndex())).castlingMove(before, after);
                    return playTheGame();
                }

                // ПРОВЕРКА НА ШАХ
                for (int i = 0; i < chessboard.getBoard().size(); i++) {
                    if (chessboard.getBoard().get(i) instanceof BlackKing) {
                        if (BlackCheck.checkIsFound(chessboard.getBoard().get(i).getCoordinate())) {
                            if (!(mateForBlack.mateAble(chessboard.getBoard().get(i).getCoordinate()))) {
                                System.out.println("Шах ходить можно только королём");
                                before = chessboard.getBoard().get(i).getCoordinate();
                                System.out.println("ВЫбирайте координаты хода королём");
                                Index index = new Index();
                                while (after != index) {
                                    for (Index tmp : blackKingMoves.getKingMoves()) {
                                        after = getIndex.scanIndex();
                                        if (tmp.getIndex() == after.getIndex()) {
                                            chessboard.getBoard().get(before.getIndex()).move(before, after);
                                            index = tmp;
                                            break;
                                        }
                                        return playTheGame();
                                    }
                                }
                            } else {
                                System.out.println("Мат");
                                mate = 1;
                                return playTheGame();
                            }
                        }
                    }
                }
                before = getIndex.scanIndex();
                after = getIndex.scanIndex();

                chessboard.getBoard().get(before.getIndex()).move(before, after);
                chessboard.printTheBoard();
                blackTurn.setIndex(after);
                lastTurn.add(blackTurn);

                if (chessboard.getBoard().get(before.getIndex()) instanceof WhitePawn &&
                        chessboard.getBoard().get(after.getIndex()).getCoordinate().getCoordinateY() == 8) {
                    replaceIt.pawnReplacement(before, after);
                    return playTheGame();
                } else if (chessboard.getBoard().get(before.getIndex()) instanceof BlackPawn &&
                        chessboard.getBoard().get(after.getIndex()).getCoordinate().getCoordinateY() == 0) {
                    replaceIt.pawnReplacement(before, after);
                    return playTheGame();
                }
                return playTheGame();
            }
        }
        return playTheGame();
    }
}