1. ホーム
  2. java

[解決済み] スキャナを閉じない

2022-02-07 15:50:46

質問

私はあるゲームに取り組んでいるのですが、スキャナーにちょっとした問題が発生しました。 リソースリークを起こすのですが、スキャナーが閉じないのです。

でも、以前はスキャナを閉じなくても動いていたと思っていました。 しかし、今はそうではありません。どなたか助けてください。

import java.util.Scanner;

public class Main {

    public static final boolean CHEAT = true;

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int amountOfPlayers;
        do {
            System.out.print("Select the amount of players (1/2): ");
            while (!scanner.hasNextInt()) {
                System.out.println("That's not a number!");
                scanner.next(); // this is important!
        }

        amountOfPlayers = scanner.nextInt();
        while ((amountOfPlayers <= 0) || (amountOfPlayers > 2));
        System.out.println("You've selected " + amountOfPlayers+" player(s)."); 
    }
}

解決方法は?

リソースを閉じない場合は、通常、最終ブロック内でスキャナを閉じる必要があります。

Scanner scanner = null;
try {
    scanner = new Scanner(System.in);
    //rest of the code
}
finally {
    if(scanner!=null)
        scanner.close();
}

あるいは、さらに良い方法として、新しい リソースステートメントを使用してみてください :

try(Scanner scanner = new Scanner(System.in)){
    //rest of your code
}