Видел, что у многих была эта проблема, но решения не нашел.
public class MinesweeperGame extends Game {
    private static final int SIDE = 9;
    private GameObject[][] gameField = new GameObject[SIDE][SIDE];
    private int countMinesOnField;
    private final static String MINE = "\uD83D\uDCA3";
    private final static String FLAG = "\uD83D\uDEA9";
    private int countFlags;
    private boolean isGameStopped;
    private int countClosedTiles = SIDE * SIDE;
    private int score;

    @Override
    public void initialize() {
        setScreenSize(SIDE, SIDE);
        createGame();
    }

    private void createGame() {
        for (int y = 0; y < SIDE; y++) {
            for (int x = 0; x < SIDE; x++) {
                boolean isMine = getRandomNumber(10) < 1;
                if (isMine) {
                    countMinesOnField++;
                }
                gameField[y][x] = new GameObject(x, y, isMine);
                setCellColor(x, y, Color.ORANGE);
            }
        }
        countFlags = countMinesOnField;
        isGameStopped = false;
        countMineNeighbors();
    }

    private List<GameObject> getNeighbors(GameObject gameObject) {
        List<GameObject> result = new ArrayList<>();
        for (int y = gameObject.y - 1; y <= gameObject.y + 1; y++) {
            for (int x = gameObject.x - 1; x <= gameObject.x + 1; x++) {
                if (y < 0 || y >= SIDE) {
                    continue;
                }
                if (x < 0 || x >= SIDE) {
                    continue;
                }
                if (gameField[y][x] == gameObject) {
                    continue;
                }
                result.add(gameField[y][x]);
            }
        }
        return result;
    }

    private void countMineNeighbors(){
        List<GameObject> gameObjects = new ArrayList<>();
        GameObject object = new GameObject(1, 2, false);
        for (int i = 0; i < gameField.length; i++){
            for (int j = 0; j < gameField.length; j++){
                if (gameField[i][j].isMine == false){
                    gameObjects = getNeighbors(gameField[i][j]);
                    for (int c = 0; c < gameObjects.size(); c++){
                        object = gameObjects.get(c);
                        if (object.isMine == true){
                            gameField[i][j].countMineNeighbors+=1;
                        }
                    }
                }
            }
        }
    }

    @Override
    public void onMouseLeftClick(int i, int j){
        openTile(i, j);
    }

    @Override
    public void onMouseRightClick(int i, int j){
        markTile(i, j);
    }

    private void markTile(int i, int j){
        if(isGameStopped == true){
            return;
        }
        if(gameField[j][i].isOpen || (countFlags == 0 &&
        gameField[j][i].isFlag == false)){
            return;
        }
        else{
            if (gameField[j][i].isFlag == false){
                gameField[j][i].isFlag = true;
                countFlags--;
                setCellValue(i, j, FLAG);
                setCellColor(i, j, Color.YELLOW);
            }
            else{
                gameField[j][i].isFlag = false;
                countFlags++;
                setCellValue(i, j, "");
                setCellColor(i, j, Color.ORANGE);
            }
        }
    }

    private void openTile (int i, int j){
        if(gameField[j][i].isOpen == true || gameField[j][i].isFlag == true
        || isGameStopped == true){
            return;
        }
        countClosedTiles--;
        GameObject object = new GameObject(1, 2, false);
        if (gameField[j][i].isMine == true){
            gameField[j][i].isOpen = true;
            setCellValueEx(i, j, Color.RED, MINE);
            gameOver();
        }
        else{
            if (gameField[j][i].countMineNeighbors == 0){
                gameField[j][i].isOpen = true;
                score = score + 5;
                setScore(score);
                setCellColor(i, j, Color.GREEN);
                setCellValue(i, j, "");
                List<GameObject> gameObjects = getNeighbors(gameField[j][i]);
                for (int c = 0; c < gameObjects.size(); c++){
                    object = gameObjects.get(c);
                    if (object.isOpen == false){
                        openTile(object.x, object.y);
                    }
                }
            }
            else{
                gameField[j][i].isOpen = true;
                score = score + 5;
                setScore(score);
                setCellColor(i, j, Color.GREEN);
                setCellNumber(i, j, gameField[j][i].countMineNeighbors);
            }
            if(countClosedTiles == countMinesOnField){
                    win();
                }
        }
    }

    private void win(){
        isGameStopped = true;
        showMessageDialog(Color.BLUE, "YOU WIN", Color.GREEN, 32);
    }

    private void gameOver(){
        isGameStopped = true;
        showMessageDialog(Color.RED, "YOU LOSE", Color.ORANGE, 32);
    }
}