使用 Scanner 在许多地方 Java 泄漏资源
Resource leaked in many places Java using Scanner
在过去的 42 分钟里,我一直在努力找出错误的原因
Resource leaked: 'myFirstname' and many other decleared variables
including myObj when its ran.
你只需要一个Scanner
。 警告 是因为您从未关闭 Scanner
。通常这是一个有价值的警告,但是当 Scanner
包裹 System.in
关闭时它也会关闭 System.in
所以通常你不会关闭这样的 Scanner
。但是,您可以在程序结束之前这样做;最简单的方法是 try-with-Resources
。此外,您将扫描仪 myUsername
与 String
newUsername
进行比较,并关闭 if
body 和不幸放置的 ;
。修复所有这些,它应该看起来像
try (Scanner scan = new Scanner(System.in)) {
System.out.println("Enter your First Name");
String firstName = scan.nextLine();
System.out.println("Enter your Last Name");
String lastName = scan.nextLine();
System.out.println("Enter your Year of Employment");
String yearVar = scan.nextLine();
String newUsername = firstName.substring(0, 1) + lastName;
System.out.println("Username: " + newUsername);
String newPassword = firstName.substring(0, 3) + yearVar + lastName.substring(0, 3);
System.out.println("Password: " + newPassword);
System.out.println("Enter your Username");
String userName = scan.nextLine();
System.out.println("Enter your Password");
String passWord = scan.nextLine();
if (userName.equals(newUsername)) {
System.out.println("Would you like to change your password?");
}
}
您正在创建大量 Scanner 对象,并关闭了其中的 none 个。这导致资源泄漏。要关闭它们并停止泄漏,请在完成后添加:myScanner.close()
。
此外,最好使用较少的扫描器对象并重用一个以优化您的代码。
编辑:正如 Elliott Frisch 的回答所指出的,关闭扫描仪包装 System.in 也会关闭它,这通常是不需要的。
在过去的 42 分钟里,我一直在努力找出错误的原因
Resource leaked: 'myFirstname' and many other decleared variables including myObj when its ran.
你只需要一个Scanner
。 警告 是因为您从未关闭 Scanner
。通常这是一个有价值的警告,但是当 Scanner
包裹 System.in
关闭时它也会关闭 System.in
所以通常你不会关闭这样的 Scanner
。但是,您可以在程序结束之前这样做;最简单的方法是 try-with-Resources
。此外,您将扫描仪 myUsername
与 String
newUsername
进行比较,并关闭 if
body 和不幸放置的 ;
。修复所有这些,它应该看起来像
try (Scanner scan = new Scanner(System.in)) {
System.out.println("Enter your First Name");
String firstName = scan.nextLine();
System.out.println("Enter your Last Name");
String lastName = scan.nextLine();
System.out.println("Enter your Year of Employment");
String yearVar = scan.nextLine();
String newUsername = firstName.substring(0, 1) + lastName;
System.out.println("Username: " + newUsername);
String newPassword = firstName.substring(0, 3) + yearVar + lastName.substring(0, 3);
System.out.println("Password: " + newPassword);
System.out.println("Enter your Username");
String userName = scan.nextLine();
System.out.println("Enter your Password");
String passWord = scan.nextLine();
if (userName.equals(newUsername)) {
System.out.println("Would you like to change your password?");
}
}
您正在创建大量 Scanner 对象,并关闭了其中的 none 个。这导致资源泄漏。要关闭它们并停止泄漏,请在完成后添加:myScanner.close()
。
此外,最好使用较少的扫描器对象并重用一个以优化您的代码。
编辑:正如 Elliott Frisch 的回答所指出的,关闭扫描仪包装 System.in 也会关闭它,这通常是不需要的。