在此代码中,抛出了我的异常:
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1540)
at com.cristianvalero.filetransfers.main.client.Client.askToDo(Client.java:98)
at com.cristianvalero.filetransfers.main.client.Client.run(Client.java:64)
at com.cristianvalero.filetransfers.main.client.Client.main(Client.java:36)
抛出错误的方法:
private String askToDo()
{
Scanner teclado = new Scanner(System.in);
System.out.print("What would you like to do? [help]: ");
String a = teclado.nextLine().toLowerCase();
teclado.close();
return a;
}
但是在这个在其他代码之前执行的代码中,没有抛出任何错误。
private void setConnection() //Type of bookmarks "servers":["casa:1.1.1.1:3306", "trabajo:1.1.1.1:7809"]
{
Scanner teclado = new Scanner(System.in);
System.out.print("New server [N] or Connect previous server [P]: ");
final String typed = teclado.nextLine().toLowerCase();
if (typed.equals("n"))
noHaveServers(teclado);
else if (typed.equals("p"))
{
if (ServerList.getAllServers(CONFG).size() == 0)
noHaveServers(teclado);
else
haveServers(teclado);
}
else
{
System.out.println("Sorry, I can't understand you.");
teclado.close();
setConnection();
}
teclado.close();
}
PD:此方法位于Thread类扩展的Client类中,并从run()方法调用。
答案 0 :(得分:0)
请勿关闭teclado
中的扫描程序setConnection()
。关闭扫描程序也会关闭其关联的流。然后在askToDo
中,当您创建另一个扫描程序时,System.in已经关闭。
您应该拥有一个使用System.in初始化的顶级静态扫描程序对象,并在您的类中的任何位置使用它,而不是在每个方法中创建一个新的Scanner。