如何修复java.util.NoSuchElementException

时间:2019-04-14 23:17:25

标签: java

我想修复java.util.NoSuchElementException错误。 我不断收到错误消息:

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at Main.newUser(Main.java:28)
    at Main.main(Main.java:18)

使用此代码

import java.util.Scanner;
import java.io.*;
class Main2
{
    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        input.close();
        newUser();
    }
    private static void newUser()
    {
        try
        {
            Scanner input = new Scanner(System.in);
            System.out.println("Please enter the name for the new user.");
            String userNameNew = input.nextLine();
            System.out.println("Please enter the password for the new user.");
            String userPassWordNew = input.nextLine();
            System.out.println("The new user: " + userNameNew + " has the password: " + userPassWordNew + "." );
            PrintWriter out = new PrintWriter("users.txt");
            out.print(userNameNew + "\r\n" + userPassWordNew);
            out.close();
            input.close();
        } catch (IOException e) { e.printStackTrace(); }
    }
}

能帮我吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我找到了导致此异常的原因。

因此,在您的主要方法中,您初始化了Scanner类对象并立即将其关闭。

这是问题所在。因为当扫描程序调用close()方法时,如果源实现了Closeable接口,它将关闭其输入源。

  

关闭扫描仪后,如果扫描仪关闭,它将关闭其输入源。   源实现了Closeable接口。

https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html

作为输入源的InputStream类实现了Closeable接口。

https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html

进一步,您将Scanner类对象初始化为您的 newUser()方法。此处,扫描程序类对象已成功初始化,但您的输入源仍处于关闭状态。

所以我的建议是只关闭一次扫描器类对象。 请找到您的更新代码。

    class Main2
    {
        public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        newUser(input); 
      //input.close()
    }
    private static void newUser(Scanner input) 
    {
        try {
            System.out.print("Please enter the name for the new user.");
            String userNameNew = input.nextLine();
            System.out.println("Please enter the password for the new user.");
            String userPassWordNew = input.nextLine();
            System.out.println("The new user: " + userNameNew + " has the password: " + userPassWordNew + "." );
            PrintWriter out = new PrintWriter("users.txt");
            out.print(userNameNew + "\r\n" + userPassWordNew);
            out.close();
        } catch (IOException e) { e.printStackTrace(); }
    }
}