java.lang.IllegalStateException:扫描程序已关闭

我得到了以下代码,但是在第一次循环之后,我的调试器发出以下错误,很奇怪,我一直这样做,但它不再起作用,这很奇怪?! 我一步一步检查它,它只是在切换顺序后停止?

Exception in thread "main" java.lang.IllegalStateException: Scanner closed at java.util.Scanner.ensureOpen(Unknown Source) at java.util.Scanner.findWithinHorizon(Unknown Source) at java.util.Scanner.nextLine(Unknown Source) at Level.schleife(Level.java:35) at Crawler.main(Crawler.java:23) 

 public boolean schleife() { System.out.println("Das Spiel beginnt, bewege Dich mit der WASD Steuerung!"); Scanner eingabeMove = new Scanner(System.in); tmpi = positioni; tmpj = positionj; while (true) { String bewegung = eingabeMove.nextLine(); switch (bewegung) { case "w": { // vorwärts tmpi += 1; if (actionResult()) { positioni = tmpi; break; } else { return false; } } case "a": { // links tmpj -= 1; if (actionResult()) { positionj = tmpj; break; } else { return false; } } case "s": { // rückwärts tmpi -= 1; if (actionResult()) { positioni = tmpi; break; } else { return false; } } case "d": { // rechts tmpj += 1; if (actionResult()) { positionj = tmpj; break; } else { return false; } } default: { // falsche Eingabe System.out.println("Falsche Eingabe!"); continue; } } eingabeMove.close(); } } 

不要打电话给eingabeMove.close();while循环结束while 。 您导致扫描仪在第一个循环结束时无法运行。

由于循环总是以return结束,因此在此schleife()方法中关闭Scanner没有意义。

实际上你不需要关闭扫描仪,因为它包装了System.in ,它永远不会关闭。 鉴于这一事实,当schleife()返回时,你可以简单地让eingabeMove超出范围。

如果您确实要关闭扫描程序,则应将eingabeMove作为参数传递给方法,并将其从调用方法中关闭。

 public boolean schleife(Scanner eingabeMove) { // use the scanner } 

调用代码:

 Scanner eingabeMove = new Scanner(System.in); schleife(eingabeMove); eingabeMove.close();