用 Java 重新创建扫描仪

Posted

技术标签:

【中文标题】用 Java 重新创建扫描仪【英文标题】:Recreating Scanner in Java 【发布时间】:2019-10-07 09:06:38 【问题描述】:

我正在用 java 编写游戏,我有一个方法要求用户从控制台输入值:

public String getUserInput() 
    try (Scanner scan = new Scanner(System.in)) 
        String s = scan.nextLine();
        return s;
    

问题是我想调用这个方法不同的次数取决于外部参数,我事先不知道,我会再次调用还是不调用。

但是当我为第二次调用调用这样的方法时 - 我得到了

Exception in thread "main" java.util.NoSuchElementException: No line found

问题:

我不明白这个错误的根本原因:我知道我不能 重新打开扫描仪,但在这里我没有重新打开它,而是重新创建它。 我该如何处理?

【问题讨论】:

看看这篇文章,它会告诉你为什么会出现这个错误:using scanner with try-with-resources 【参考方案1】:

不要重新打开或重新创建它。在您的程序期间使用一个Scanner

关闭Scanner(在本例中,使用try-with-resources 块)将关闭其输入,在本例中为System.in。您不想关闭它,因为您无法重新打开它。

【讨论】:

是的,但是什么时候关闭呢?我应该在程序结束时手动关闭它吗?但是如果我的程序以异常结束,在这种情况下扫描仪将不会关闭 是的,你应该在最后手动关闭它。如果你的程序异常结束,Scanner 也会消失。一旦你的程序消失了,它就不会继续存在了。 不,(我不建议)关闭扫描仪(在这种情况下),因为它也会关闭System.in,而你真的不想这样做。让JVM来处理

以上是关于用 Java 重新创建扫描仪的主要内容,如果未能解决你的问题,请参考以下文章

用打印机扫描文件到电脑上传送失败怎么回事?

用java运行纸质扫描仪软件

Java,“扫描仪”的内存使用情况

用Java写了一个条形码,但用手机扫描却无效

Java扫描仪输入读数

蓝牙扫描仪重新连接android