Đóng và tạo mới đối tượng Scanner

public class Main {

    public static void main(String[] args) {

        Scanner input1 = new Scanner(System.in);

        System.out.print("Please enter your name: ");

        String name = input1.nextLine();

        input1.close();

        

        Scanner input2 = new Scanner(System.in);

        System.out.print("Please enter your age: ");

        int age = input2.nextInt();

        input2.close();

    }

}

Khi chạy chương trình trên thì sẽ nhập được tên bình thường, nhưng sẽ bị 1 ngoại lệ java.util.NoSuchElementException ở lần nhập tuổi. Nguyên nhân dẫn đến việc này là tất cả các đối tượng của lớp Scanner đều chia sẻ chung InputStream nên khi 1 đối tượng đóng InputStream thì các đối tượng khác không thể sử dụng InputStream được.

Cách giải quyết là chỉ sử dụng duy nhất 1 đối tượng thuộc lớp Scanner hoặc nếu dùng nhiều đối tượng thì không đối tượng nào được phép đóng InputStream bằng phương thức close().