当前位置: 首页 > 知识库问答 >
问题:

IllegalStateException:扫描程序关闭

计弘
2023-03-14

我得到了下面的代码,但是在第一个循环之后,我的调试器给出了下面的错误,这很奇怪,我一直都是这样做的,但是它不再工作了,这很奇怪?!我一步一步地检查了一下,是不是开关命令后才停?

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个答案

成和悌
2023-03-14

不要在while循环结束时调用eingabemove.close();。您将导致扫描仪在第一个循环结束时无法操作。

因为循环总是以返回结束,所以在这个schleife()方法中关闭扫描器是没有意义的。

不过,您实际上不需要关闭扫描器,因为它包装system.in,无论如何都不会关闭。鉴于这一事实,在schleife()返回时,您可以简单地让eingabemove超出范围。

如果您真的想关闭扫描器,您应该将eingabemove作为参数传递给该方法,并从调用方法中关闭它。

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

呼叫代码:

Scanner eingabeMove = new Scanner(System.in);
schleife(eingabeMove);
eingabeMove.close();
 类似资料:
  • 问题内容: 我正在用Java从头开始编写RPG战斗系统,雄心勃勃吧?好吧,我遇到了麻烦。这是我的代码: 当它到达代码中的这一点时,我得到: 你会怎么做?说(战斗)(运行)(使用项) 线程“主”中的异常java.util.NoSuchElementException: 在Combat.turnChoice(Combat.java:23)的 java.util.Scanner.nextLine(Unk

  • 这是我程序的主要方法。当调用nextLine()函数时,扫描器解析变量L而不是space时,我遇到了一个问题。不过,nextInt()可以按照预期工作。我的程序在试图用integer.parseint()函数解析空字符串时崩溃了。 第一个输入是指定将要进行的行数的整数,下面的输入是空格分隔的整数。 堆栈跟踪如下:

  • 许多cPanel网络托管都附带此ClamAV病毒扫描程序功能,以防止您的服务器上的潜在威胁。 您可以对文件进行按需扫描,以查看它们是否感染了任何病毒。 ClamAV是一个开源的强大的防病毒软件,它使用其广泛的数据库来检测几种类型的潜在威胁,如病毒,特洛伊木马,恶意软件,恶意脚本等。 您可以使用防病毒扫描主目录的不同扇区。 要使用病毒扫描程序扫描您的帐户,请使用以下步骤。 Step 1 - 通过单击

  • 问题内容: 我正在使用嵌套循环从字符串行(从文本文件)中提取数字,如下所示: 问题在于此代码将跳过所有空格,但是我也需要使用这些“空格”。那么可以返回空格还是我需要使用其他东西? 我的文本文件可能包含以下内容: 这些空白行各包含1条,这就是我需要返回的行。 问题答案: 使用扫描仪和方法,您将找到解决方案,因为这将使您能够捕获空白行或空白行。

  • 问题内容: 我刚刚了解了Java的Scanner类,现在我想知道它如何与StringTokenizer和String.Split进行比较/竞争。我知道StringTokenizer和String.Split仅适用于字符串,那么为什么要对字符串使用扫描器?扫描仪是否仅打算一站式进行拆分? 问题答案: 他们本质上是课程的马。 设计用于需要解析字符串,提取不同类型数据的情况。它非常灵活,但是可以说它并没

  • 本文向大家介绍Python端口扫描简单程序,包括了Python端口扫描简单程序的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Python端口扫描的实现代码,供大家参考,具体内容如下 获取本机的IP和端口号: PortScan.py 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 问题内容: 我试图将我的应用程序中较大且经常使用的部分重构为单独的方法,以使其易于维护。 其中一些方法要求用户输入并进行输入验证,因此我使用了Scanner和System.in,但是当我关闭Scanner时,我也关闭了System.in。 所以我的问题是,我只能通过用CloseShieldInputStream屏蔽System.in来防止System.in关闭,还是应该开始将Scanner传递给方