线程“main”中的异常java.util.NoSuchElementException:找不到行3

时间:2018-01-05 15:39:52

标签: java java.util.scanner nosuchelementexception

在此代码中,抛出了我的异常:

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()方法调用。

1 个答案:

答案 0 :(得分:0)

请勿关闭teclado中的扫描程序setConnection()。关闭扫描程序也会关闭其关联的流。然后在askToDo中,当您创建另一个扫描程序时,System.in已经关闭。

您应该拥有一个使用System.in初始化的顶级静态扫描程序对象,并在您的类中的任何位置使用它,而不是在每个方法中创建一个新的Scanner。