Java Scanner抛出一个NoTouchElementException

Java Scanner抛出一个NoTouchElementException,java,java.util.scanner,Java,Java.util.scanner,我正在学习Java,通过这样做,我编写了一个简单的猜谜游戏。现在我正试图通过添加额外的特性来改进它,但我一直在努力使它更“模块化”,即:使用更多的方法而不是长main()方法 我有这个: while(!guessed) { System.out.println("Guess a number between 1 and 1000."); guessedNum = Integer.parseInt(input.nextLine()); numCheck(guessedNum

我正在学习Java,通过这样做,我编写了一个简单的猜谜游戏。现在我正试图通过添加额外的特性来改进它,但我一直在努力使它更“模块化”,即:使用更多的方法而不是长main()方法

我有这个:

while(!guessed) {
    System.out.println("Guess a number between 1 and 1000.");
    guessedNum = Integer.parseInt(input.nextLine());
    numCheck(guessedNum);
}
timeEnd = System.currentTimeMillis();
input.close();
System.out.println("Seconds to guess: " + (timeEnd - timeStart)/1000);
这很好,但如果我尝试为“guess num”创建一个单独的方法,如下所示:

public static int guessNum() {
    System.out.println("Escriba un numero entre 1 y 1000.");
    Scanner input = new Scanner(System.in);
    guessedNum = Integer.parseInt(input.nextLine());
    input.close();
    return guessedNum;
}
它抛出以下错误:

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at game.Guess.guessNum(Guess.java:40)
    at game.Guess.start(Guess.java:28)
    at game.Game.main(Game.java:21)
我一直在尝试使用分隔符和nextLine(),但都是相同的错误。我也尝试过用eclipse调试它,但当它转到nextLine时,它会跳转到一个页面,上面说找不到源代码


有线索吗?如果需要,我可以修改我的问题。

请关闭此行中的
扫描仪

input.close();

这也会关闭系统中的
。所以下次当你从同一个扫描器读取数据时,你会发现这个错误

可能与其他相关问题的根本原因相同。关闭扫描仪也将关闭
System.in
,因此,如果您在先前关闭类似扫描仪后再次尝试
new scanner(System.in)
,它将不会读取任何内容。谢谢您的回答,但我不理解其行为。如果我用Scanner input=new Scanner(System.in);,再次打开它;,它不应该像以前一样再次读取吗?不,因为
System.in
仍处于关闭状态。创建第二个扫描仪不会重新打开它。