Jogo da Velha Java

Estou recebendo esse erro.

Escolha o Jogador

  1. Humano
  2. Computador

Opção: 1

Agora selecione a opção 2

Jogador ‘Humano’ criado!

  1. Humano
  2. Computador

Opção: 2

Agora selecione a opção 2

Jogador VS Computador
Jogo da velha
Escolha a dificuldade 1,2 ou 3:
2

Rodada 1
Linha: Exception in thread “main” java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at com.uninter.Humano.Tentativa(Humano.java:25)
at com.uninter.Humano.jogar(Humano.java:16)
at com.uninter.Jogo.Jogar(Jogo.java:70)
at com.uninter.Jogo.(Jogo.java:17)
at com.uninter.JogoDaVelha.main(JogoDaVelha.java:8)

CÓDIGO

package com.uninter;

import java.util.Scanner;

public class Jogo { //classe jogo
private Tabuleiro tabuleiro;
private int rodada=1, vez=1;
private Jogador jogador1;
public Scanner entrada = new Scanner(System.in);
private int opcao;

public Jogo(){ //inicia o jogo
    tabuleiro = new Tabuleiro();
    iniciarJogadores();
    dificuldade();
    while( Jogar() );
}

public void iniciarJogadores(){ //mensagem de inicio para esolher o jogador
    System.out.println("Escolha o Jogador");
    if(escolherJogador() == 1)
        this.jogador1 = new Humano(1);
	else
		new Computador(2);
    
    	
    
    if(escolherJogador() == 1)
		new Computador(2);

}
public void dificuldade() { //escolher dificuldade

try (Scanner entrada = new Scanner(System.in)) {
	System.out.println(" Jogo da velha");
	System.out.println("Escolha a dificuldade 1,2 ou 3:");
	setOpcao(entrada.nextInt());
	}
}



public int escolherJogador(){ //opção para escolher qual jogador 
    int opcao=1;
    
    do{
        System.out.println("1. Humano");
        System.out.println("2. Computador\n");
        System.out.print("Opção: ");
        opcao = entrada.nextInt();
        System.out.println();
        System.out.println("Agora selecione a opção 2");
        System.out.println();
        if(opcao != 1)
            System.out.println("Jogador VS Computador");
    }
    
    while(opcao != 1 && opcao != 2);
    
    return opcao;
}

public boolean Jogar(){
    if(ganhou() == 0 ){
        System.out.println("");
        System.out.println("Rodada "+rodada);
        
        if(vez()==1)
            jogador1.jogar(tabuleiro);
       
        
        if(tabuleiro.tabuleiroCompleto()){ //se o tabuleiro estiver completo 
            System.out.println("Tabuleiro Completo. Jogo empatado");
            return false;
        }
        vez++;
        rodada++;

        return true;
    } else{
        if(ganhou() == -1 ) //mensagem de ganhador
            System.out.println("Jogador 1 ganhou!");
        return false;
    }
        
}


public int vez(){ // evita o jogo ficar em loop eparando a vez de cada um 
    if(vez%2 == 1)
        return 1;
    else
        return 2;
}

public int ganhou(){ //checa quem ganhou
    if(tabuleiro.Linhas() == 1)
        return 1;
    if(tabuleiro.Colunas() == 1)
        return 1;
    if(tabuleiro.Diagonais() == 1)
        return 1;
    
    if(tabuleiro.Linhas() == -1)
        return -1;
    if(tabuleiro.Colunas() == -1)
        return -1;
    if(tabuleiro.Diagonais() == -1)
        return -1;
    
    return 0;
}

public int getOpcao() {
	return opcao;
}

public void setOpcao(int opcao) {
	this.opcao = opcao;
}

}

A classe Humano na linha 25 está chamando um outro método que está acessando ou lendo alguma informação que não existe.

Dá uma olhada neste tópico: A sua resposta.

import java.util.Random;

public class Computador extends Jogador{
    
    public Computador(int jogador){
        super(jogador);
        System.out.println("Jogador 'Computador' criado!");
    }
    
    @Override
    public void jogar(Tabuleiro tabuleiro){
    	Tentativa(tabuleiro);
        tabuleiro.setPosicao(tentativa, jogador);
    }
    
    @Override
    public void Tentativa(Tabuleiro tabuleiro){
    	Random random = new Random();
    	do{
            do{
                tentativa[0] = random.nextInt(4);
            }while( tentativa[0] > 3 || tentativa[0] < 1);
            System.out.print("Linha: "+tentativa[0]);
            System.out.println();
            do{
                tentativa[1] = random.nextInt(4);
            }while(tentativa[1] > 3 ||tentativa[1] < 1);
            System.out.print("Coluna: "+tentativa[1]);
            System.out.println();
            
            tentativa[0]--; 
            tentativa[1]--;
            
            if(!checaTentativa(tentativa, tabuleiro))
                System.out.println("Esse local já foi marcado. Tente outro.");
        }while( !checaTentativa(tentativa, tabuleiro) );
    }
}

Preciso ter a dificuldade inclusa. Quando inseri dificuldade(); foi quando deu erro, sem ele da certo porém não da a opção de dificuldade e a jogada do computador não acontece.