为了账号安全,请及时绑定邮箱和手机立即绑定

java.lang.IllegalStateException:扫描仪已关闭

/ 猿问

java.lang.IllegalStateException:扫描仪已关闭

慕仰0522570 2019-12-06 15:41:32

我得到了以下代码,但是在第一个循环之后,我的调试器给出了以下错误,这很奇怪,我一直那样做,但是它不再起作用了,这很奇怪吗?我一步一步检查,切换命令后只是停顿了吗?


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;

                }

    }

}


查看完整描述

3 回答

?
蝴蝶不菲

不要eingabeMove.close();在while循环结束时调用。您正在导致扫描程序在第一个循环结束时无法使用。


由于循环始终以结束return,因此用这种schleife()方法关闭Scanner没有意义。


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


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


public boolean schleife(Scanner eingabeMove) {

   // use the scanner

}

调用代码:


Scanner eingabeMove = new Scanner(System.in);

schleife(eingabeMove);

eingabeMove.close();


查看完整回答
反对 回复 2019-12-06
?
皈依舞

实际上,如果将closewhile循环外移,它将永远不会被调用,因为离开循环的唯一方法是使用return语句之一。 

查看完整回答
反对 回复 2019-12-06
?
慕仙森

gknicker我不能使用调用方法,不能在另一个类中schleife在我的main方法中启动方法,并且schleife在第二个类中定义该方法...向下2行,右边不可达,并且1也不起作用

查看完整回答
反对 回复 2019-12-06

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信