当我们在使用控制台输入操作时,最常用到的是扫描器Scanner工具类,但一般使用该类都忘记了关闭资源,最近写代码时特意每次使用都执行了关闭操作,结果出现了异常NoSuchElementException,以下是具体异常和解决方法。

异常发生场景:

1、当同一个类中使用了2个至多个Scanner对象,当执行过程中关闭了其中一个,在使用其他的对象时异常。

2、当一个类(该类要使用的Scanner对象方法)调用另个一类(该类也要使用的Scanner对象方法,且使用完执行了关闭资源操作)时发生异常。


虽然发生场景不同,但异常都是NoSuchElementException(没有这样的元素异常)。

异常原因分析和解决:

原因:当我们点开System.in的源码时会发现,in是由final static修饰的静态常量,是个输入流,存储在虚拟机中的方法区,该区域存储内容为线程共享,所以当执行过程中有一次执行了关闭资源操作时,把System.in输入流资源也关闭了,接下来其他Scanner扫描器自然也就没法继续使用。
解决:只要在确保是最后一次使用Scanner扫描器后关闭就行了,也可以都不关,不用管其他类有警告(感叹号)。

简单的测试代码:

import java.util.Scanner;
public class Demo1 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Scanner sc2 = new Scanner(System.in);//调用其他类的方法,且其他类方法也用到了Scanner,且执行了关闭资源操作//new Demo2().show();String string = sc.nextLine();System.out.println("启动类主方法1:"+string);sc.close();int nextInt = sc2.nextInt();System.out.println("启动类主方法2:"+string);}
}
import java.util.Scanner;
public class Demo2 {public void show(){Scanner sc = new Scanner(System.in);System.out.println("被调用方法,请输入你的名字:");String name = sc.nextLine();System.out.println("欢迎:"+name);//关闭扫描器sc.close();}
}

使用Scanner扫描器时NoSuchElementException异常相关推荐

  1. Scanner 扫描器

    Scanner 扫描器 创建: Scanner scanner = new Scanner(System.in); 方法: nextInt() – 将输入信息的下一个标记扫描为一个 int. 如果输入 ...

  2. JSP Tomcat8.0运行连接池时发生异常【AbstractMethodError oracle.jdbc.driver.T4CConnection.isValid(I)Z】...

    原创 2015年12月28日 11:38:01 2004 一.Tomcat8.0运行连接池时发生异常: AbstractMethodError oracle.jdbc.driver.T4CConnec ...

  3. mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String

    mybatis中传集合时 报异常 invalid comparison: java.util.Arrays$ArrayList and java.lang.String 参考文章: (1)mybati ...

  4. 使用“1”个参数调用“DownloadString”时发生异常:“操作超时”

    使用"1"个参数调用"DownloadString"时发生异常:"操作超时" 参考文章: (1)使用"1"个参数调用&q ...

  5. 高并发编程-捕获线程运行时的异常 + 获取调用链

    文章目录 概述 捕获线程运行时的异常 使用场景 UncaughtExceptionHandler 接口 示例 获取调用链 使用线程池的场景: 获取线程运行时异常 概述 捕获线程运行时的异常 我们看下T ...

  6. java异常处理图片_Java处理图片时出现异常

    Java处理图片时出现异常 javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49 at com.sun.imageio. ...

  7. 解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错

    解决IntelliJ IDEA报错:调用方法[manageApp]时发生异常java.lang.IllegalStateException: 启动子级时出错 问题描述:   笔者将一个在 Tomcat ...

  8. python怎么写中文至excel_Python 解决中文写入Excel时抛异常的问题

    近期接到业务部门需求,需将统计结果每日发送到业务部门,在调试python脚本的时候,导出的Excel标题为中文,总是抛出以下异常 Traceback (most recent call last): ...

  9. redhat 中安装rpm包时遇到异常 “error: Failed dependencies:xinetd is needed by .”

    redhat 中安装rpm包时遇到异常 "error: Failed dependencies:xinetd is needed by ." 参考文章: (1)redhat 中安装 ...

最新文章

  1. 【ASP的重生】KnifeCMS.ASP跨平台支持包(支持Unix/Linux)
  2. angular2 安装
  3. 编译Android VNC Server
  4. Django框架之DRF get post put delete 使用简单示例 (利用序列化反序列化)
  5. Centos 6.x
  6. mybatis generator生成example_[Springboot系列] SpringBoot与Mybatis结合
  7. svn管理ad元件库_AD元器件库服务器管理指南
  8. Nexperia | 采用Trench肖特基二极管,实现功率密度的显著提升
  9. vivo oppo 相机权限处理
  10. ps常用快捷键 常用的
  11. 知识图谱和行业领域的结合产物-KGB知识图谱介绍
  12. 自研数据分析工具——yandas系列二:分析泰坦尼克号沉船事件中的乘客信息表
  13. 【简七理财笔记】第七课:巧用信用卡,该薅的羊毛就要薅
  14. 本地机器 Google Colab 通过 SSH 连接远程服务器
  15. 将文本数据转换成arff文件
  16. 基于GPU的高分一号影像正射校正的设计与实现
  17. 用51单片机实现按键控制LED灯亮灭
  18. 射频知识点:史密斯圆图(Smith chart)
  19. 目标跟踪——OTB平台的Python版tracker使用
  20. 【安装教程 02期】SPSS 24下载、安装、常见问题

热门文章

  1. java抽象工厂模式实例_Java设计模式百例 - 抽象工厂模式
  2. 秒表的数码管小数点的显示C语言,4位7段数码管秒表,一位小数,用at89c51单片机,汇编语言...
  3. 从零开始学习CANoe(八)—— IG 模块
  4. 11491 - Erasing and Winning(贪心)
  5. 如何利用android来赚钱
  6. 如何查看主机ip网关DNS
  7. CarSim仿真快速入门(十三)—转向系统
  8. 海康威视相机控制进阶
  9. [转帖]我在北京当了两个月“地老鼠”--底层生活散记 (续)
  10. 一个简单的星座运势查询APP