Я пытаюсь прочитать текст из файла и сравнить его с пользовательским вводом. Но когда я запускаю его, я могу получить сообщение об ошибке. Я не знаю, что не так, любая помощь будет оценена по достоинству!
Исключение в потоке "main" java .lang.IllegalStateException: Сканер закрыт при java .base / java .util .Scanner.ensureOpen (Scanner. java: 1150) в java .base / java .util.Scanner.next (Scanner. java: 1573) в java .base / java .util .Scanner.nextInt (Сканер. java: 2258) в java .base / java .util.Scanner.nextInt (Сканер. java: 2212) в test123.main (test123. java: 32 )
import java.util.Scanner; import java.io.*; public class test123 { public static void main(String[] args) throws IOException { Scanner sc1 = new Scanner(System.in); System.out.println("Please enter correct credentials to log in"); System.out.println("Username: "); System.out.println("Password: "); String userName = sc1.nextLine(); String passWord = sc1.nextLine(); File inFile = new File("employee.txt"); Scanner sc = new Scanner(inFile); String uName = sc.nextLine(); String pWord = sc.nextLine(); sc.close(); if (userName.equals(uName) && passWord.equals(pWord)) { System.out.println("Welcome " + userName + "!"); System.out.println("Menu: "); System.out.println("\t1) Account"); System.out.println("\t2) Payroll"); System.out.println("\t3) Attendance Report"); System.out.println("\t4) Service Desk"); int answer = sc.nextInt(); switch (answer) { case 1: System.out.print("Welcome to Account!"); break; case 2: System.out.print("Welcome to Payroll!"); break; case 3: System.out.print("Welcome to Attendance Report!"); break; case 4: System.out.print("Welcome to Service Desk!"); break; default: System.out.print("Enter correct menu option"); } } else { System.out.println("Sorry, you entered invalid credentials. Try again. "); } } }
Вы закрываете его:
sc.close();
и затем пытаетесь прочитать с него:
if(userName.equals(uName) && passWord.equals(pWord)) { System.out.println("Welcome " + userName + "!"); System.out.println("Menu: "); System.out.println("\t1) Account"); System.out.println("\t2) Payroll"); System.out.println("\t3) Attendance Report"); System.out.println("\t4) Service Desk"); int answer = sc.nextInt(); //here switch (answer) { case 1: System.out.print("Welcome to Account!"); break; case 2: System.out.print("Welcome to Payroll!"); break; case 3: System.out.print("Welcome to Attendance Report!"); break; case 4: System.out.print("Welcome to Service Desk!"); break; default: System.out.print("Enter correct menu option"); } } else { System.out.println("Sorry, you entered invalid credentials. Try again. "); }
Поставьте sc.close() в конце, как показано ниже:
sc.close()
... ... ... sc.close(); } }
Ошибка, которую вы получаете, заключается в том, что вы пытаетесь выполнить sc.nextInt(), когда sc.close() уже завершил выполнение, закрывая Scanner объект.
sc.nextInt()
Scanner