'scanner' is never closed

Viewed 110

I'm currently working on a project in Eclipse and I'm getting a resource leak: 'scanner' never closed. I assumed I was fine without it but I suppose not. Any advice?

package mypackage;

import java.util.Iterator;
import java.util.Scanner;
import java.util.TreeSet;

public class TreeSetUse {
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        String str;
        TreeSet<String> treeSet = new TreeSet<>();
        System.out.println("Enter line: ");
        str = scanner.nextLine();
        
        for(String word: str.split(" ")){
            treeSet.add(word);
        }

        Iterator<String> iterator = treeSet.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }

    }
   
}
1 Answers

Scanner implements the AutoCloseable interface. That means that as long as you use it as a resource inside a try-with-resources block it is guaranteed to be closed when the block exits irrespective of how the block exits:

try(Scanner scanner = new Scanner(System.in)) {
    ...
}

I recommend you always use this idiom when using a class that implements AutoCloseable.

Related