Jogo da Velha Java

Necessito de ajuda, está dando erro na dificuldade e na jogada do computador.

ABA COMPUTADOR

package com.uninter;

public class Computador extends Jogador{ //classe computador

public Computador(int jogador){ //definir jogador ou computador
    super(jogador);
    System.out.println("Jogador 'Computador' criado!");
}

@Override
public void jogar(Tabuleiro tabuleiro){
    
}

@Override
public void Tentativa(Tabuleiro tabuleiro){
    
}

}

ABA HUMANO

package com.uninter;

import java.util.Scanner;

public class Humano extends Jogador{ //classe humano
public Scanner entrada = new Scanner(System.in);

public Humano(int jogador){
    super(jogador);
    this.jogador = jogador;
    System.out.println("Jogador 'Humano' criado!");
}

@Override
public void jogar(Tabuleiro tabuleiro){
    Tentativa(tabuleiro);
    tabuleiro.setPosicao(tentativa, jogador);
}

@Override
public void Tentativa(Tabuleiro tabuleiro){ //mensagem que apareceram em cada rodada do jogo
    do{
        do{
            System.out.print("Linha: ");
            tentativa[0] = entrada.nextInt();
            
            if( tentativa[0] > 3 ||tentativa[0] < 1)
                System.out.println("Linha inválida. É 1, 2 ou 3");
            
        }while( tentativa[0] > 3 ||tentativa[0] < 1);
        
        do{
            System.out.print("Coluna: ");
            tentativa[1] = entrada.nextInt();
            
            if(tentativa[1] > 3 ||tentativa[1] < 1)
                System.out.println("Coluna inválida. É 1, 2 ou 3");
            
        }while(tentativa[1] > 3 ||tentativa[1] < 1);
        
        tentativa[0]--; 
        tentativa[1]--;
        
        if(!checaTentativa(tentativa, tabuleiro)) //para chegar se o local esta livre
            System.out.println("Esse local já foi marcado. Tente outro.");
    }while( !checaTentativa(tentativa, tabuleiro) );
}

}

ABA JOGADOR

package com.uninter;

public abstract class Jogador { //classe jogador

protected int[] tentativa = new int[2];
protected int jogador;
protected int computador;


public Jogador(int jogador){
    this.jogador = jogador;
}

public abstract void jogar(Tabuleiro tabuleiro);

public abstract void Tentativa(Tabuleiro tabuleiro);

public boolean checaTentativa(int[] tentativa, Tabuleiro tabuleiro){
    if(tabuleiro.getPosicao(tentativa) == 0)
        return true;
    else
        return false;
        
}

}

ABA JOGO

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()){ //traz a mensagem 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 separando 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;
}

}

ABA JOGO DA VELHA

package com.uninter;

public class JogoDaVelha { //classe jogo da velha

private static Jogo jogo1;

public static void main(String[] args) { //inicia o jogo
    setJogo1(new Jogo());
    
    
}

public static Jogo getJogo1() {
	return jogo1;
}

public static void setJogo1(Jogo jogo1) {
	JogoDaVelha.jogo1 = jogo1;
}

}

ABA TABULEIRO

package com.uninter;

public class Tabuleiro { //classe tabuleiro
private int[][] tabuleiro= new int[3][3]; //Matriz 3x3 criada para o jogo

public Tabuleiro(){
  
}


public void exibeTabuleiro(){ //exibe o tabuleiro
    System.out.println();
    for(int linha=0 ; linha<3 ; linha++){
    
        for(int coluna=0 ; coluna<3 ; coluna++){
            
            if(tabuleiro[linha][coluna]==-1){
                System.out.print(" X ");
            }
            if(tabuleiro[linha][coluna]==1){
                System.out.print(" O ");
            }
            if(tabuleiro[linha][coluna]==0){
                System.out.print("   ");
            }
                                           
        }
        System.out.println();
    }
            
}

public int getPosicao(int[] tentativa){  //pega as posiçoes
    return tabuleiro[tentativa[0]][tentativa[1]];
}

public void setPosicao(int[] tentativa, int jogador){ //define as posições
    if(jogador == 1)
        tabuleiro[tentativa[0]][tentativa[1]] = -1;
    else
        tabuleiro[tentativa[0]][tentativa[1]] = 1;
    
    exibeTabuleiro();
}

public int Linhas(){ //checa as linhas
    for(int linha=0 ; linha<3 ; linha++){

        if( (tabuleiro[linha][0] + tabuleiro[linha][1] + tabuleiro[linha][2]) == -3)
            return -1;
        if( (tabuleiro[linha][0] + tabuleiro[linha][1] + tabuleiro[linha][2]) == 3)
            return 1;
    }
    
    return 0;
            
}

public int Colunas(){ // chegca as colunas
    for(int coluna=0 ; coluna<3 ; coluna++){

        if( (tabuleiro[0][coluna] + tabuleiro[1][coluna] + tabuleiro[2][coluna]) == -3)
            return -1;
        if( (tabuleiro[0][coluna] + tabuleiro[1][coluna] + tabuleiro[2][coluna]) == 3)
            return 1;
    }
    
    return 0;
            
}

public int Diagonais(){ //checa as diagonais
    if( (tabuleiro[0][0] + tabuleiro[1][1] + tabuleiro[2][2]) == -3)
        return -1;
    if( (tabuleiro[0][0] + tabuleiro[1][1] + tabuleiro[2][2]) == 3)
        return 1;
    if( (tabuleiro[0][2] + tabuleiro[1][1] + tabuleiro[2][0]) == -3)
        return -1;
    if( (tabuleiro[0][2] + tabuleiro[1][1] + tabuleiro[2][0]) == 3)
        return 1;
    
    return 0;
}

public boolean tabuleiroCompleto(){ //tabuleiro completo
    for(int linha=0 ; linha<3 ; linha++)
        for(int coluna=0 ; coluna<3 ; coluna++)
            if( tabuleiro[linha][coluna]==0 )
                return false;
    return true;
}

}

Aparece esse erro ao executar o código

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:
3

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:68)
at com.uninter.Jogo.(Jogo.java:17)
at com.uninter.JogoDaVelha.main(JogoDaVelha.java:8)