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

时间:2015-01-20 18:23:02

标签: java string loops

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

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();
    }
}

1 个答案:

答案 0 :(得分:1)

请勿在{{1​​}}循环结束时调用eingabeMove.close();。您导致扫描仪在第一个循环结束时无法运行。

由于循环始终以while结尾,因此使用此return方法关闭扫描程序没有意义。

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

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

eingabeMove

致电代码:

public boolean schleife(Scanner eingabeMove) {
   // use the scanner
}
相关问题