Search code examples
javajava.util.scannerresource-leak

Scanner is never closed


I'm working on a game and I came across a little problem with my scanner. I'm getting a resource leak scanner never closed.

But I thought my scanner was working before without closing it. But now it ain't. Anyone can help me out here?

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)."); 
    }
}

Solution

  • I am assuming you are using java 7, thus you get a compiler warning, when you don't close the resource you should close your scanner usually in a finally block.

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

    Or even better: use the new Try with resource statement:

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