我已经制定了接受非空白输入的方法,以便可以验证列表中的输入。
public String getNonBlankInput(String text){
Scanner scan = new Scanner(System.in);
System.out.println(text);
String input = scan.nextLine();
while (input.isEmpty() || input.equals(" ")) {
System.out.println("Input is empty.");
System.out.println(text);
input = scan.nextLine();
}
scan.close();
return input;
}
我想在将对象添加到我的LinkedList的方法中使用此方法。这是此方法的代码:
public void addMenu(){
String log = getNonBlankInput("Enter login: ");
String pass = getNonBlankInput("Enter password: ");
String web = getNonBlankInput("Enter website: ");
Entry newEntry = new Entry(web,log,pass);
edao.addEntry(newEntry);
}
问题是,无论我输入的登录名,密码或网站有什么异常,
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at com.password.PasswordManager.data.InputValidation.getNonBlankInput(InputValidation.java:12)
at com.password.PasswordManager.input.MenuImplementation.addMenu(MenuImplementation.java:15)
任何人都知道这里有什么问题吗?在创建方法getNonBlankInput之前,一切正常。
答案 0 :(得分:0)
问题可能是您正在创建和关闭多个Scanner
实例。本质上,当您关闭System.in
时,无法再次打开它。建议在Scanner
中创建一个addMenu()
实例,并将该扫描器传递给getNonBlankInput()并在edao.addEntry()
之后关闭扫描器。
public void addMenu(){
Scanner scan = new Scanner (System.in);
String log = getNonBlankInput("Enter login: ", scan);
String pass = getNonBlankInput("Enter password: ", scan);
String web = getNonBlankInput("Enter website: ", scan);
Entry newEntry = new Entry(web,log,pass);
edao.addEntry(newEntry);
scan.close();
}
public String getNonBlankInput(String text, Scanner scan){
...
}
答案 1 :(得分:0)
您正在java.util.Scanner
方法中使用addMenu
的三个实例。您只需要使用java.util.Scanner
的一个实例。删除java.util.Scanner
和Scanner的close()
的实例,然后将其添加为类变量。
static Scanner input = new Scanner(System.in);
请确保在完成输入后关闭输入。
答案 2 :(得分:0)
我尝试了您的代码,是在创建Scanner
目标System.in
的多个实例时,先关闭后再附加此错误。
我建议您只使用一个Scanner
或不要关闭它,这项工作也可以。
示例
public void addMenu() {
Scanner scan = new Scanner(System.in);
String log = getNonBlankInput("Enter login: ", scan);
String pass = getNonBlankInput("Enter password: ", scan);
String web = getNonBlankInput("Enter website: ", scan);
scan.close();
...
}
public String getNonBlankInput(String text, Scanner scan){
System.out.println(text);
String input = scan.nextLine();
do {
if (input.isEmpty() || input.equals(" ")) {
System.out.println("Input is empty.");
System.out.println(text);
input = scan.nextLine();
}
} while ((input.isEmpty() || input.equals(" ")) && scan.hasNextLine());
return input;
}
示例2
public void addMenu() {
String log = getNonBlankInput("Enter login: ");
String pass = getNonBlankInput("Enter password: ");
String web = getNonBlankInput("Enter website: ");
...
}
public String getNonBlankInput(String text){
Scanner scan = new Scanner(System.in);
System.out.println(text);
String input = scan.nextLine();
while (input.isEmpty() || input.equals(" ")) {
System.out.println("Input is empty.");
System.out.println(text);
input = scan.nextLine();
}
//scan.close();
return input;
}