Alguem poderia me ajudar com esse problema

gostaria que nesse Scanner int quando alguem botasse algo que nao devia retornasse do inicio para que ele botasse a resposta certa mas quando chega no erro so exibe a menssagem e acaba o pograma

public class Funçao{
Scanner sc = new Scanner(System.in);
int x;
boolean sim = true;
public void loop() {
while(sim) {
System.out.print(“digite um numero:”);

	try {
		  x = sc.nextInt();
		} catch (InputMismatchException erro ){
			System.out.printf("erro %nDigite um numero%n");return;}

	System.out.println("fim");
	sc.close();break;}
}
public static void main (String[] args){
	Funçao fun = new Funçao();
	fun.loop();

}}

public class Funcao {
	
	public static void main(String[] args) {
		Funcao funcao = new Funcao();
		funcao.loop();
	}
	
	private final Scanner scanner = new Scanner(System.in);

	public void loop() {
		while (true) {
			System.out.print("digite um numero: ");
			try {
				int x = Integer.parseInt(scanner.nextLine());
				System.out.println("fim");
				return;
			} catch (InputMismatchException erro ) {
				System.out.println("erro!");
			}
		}
	}
}

muito obrigado staroski ajudou muito

1 curtida