java中多个类使用同一个Scanner(System.in)对象
程序员文章站
2022-06-02 15:46:38
...
问题描述:在一个java文件中的多个类都要使用Scanner对象,于是我多次创建Scanner对象并多次关闭。出现以下错误:
问题起因:经网上搜索后得知:sc.close()一旦调用则就算再次创建Scanner(System.in)对象也无法继续输入,所以要慎用close()方法。但多次查找后并未找到我想要的解决办法,故写此博客以作记录。
解决方案:在本文件的public类中(意即整个程序的入口)创建Scanner对象(需加上public static修饰),并在main方法中调用close()方法关闭输入流。然后在其他类中需要输入时使用:主类名.sc.next() 即可。代码示例如下:
创建及关闭:
public class FileManager
{
== public static Scanner sc = new Scanner(System.in);==
public static void main(final String[] args) throws Exception {
final MainMenu mainmenu = new MainMenu();
mainmenu.StartMenu();
== sc.close();==
}
}
其他类的使用:
class EnterDirectory {
EnterDirectory() throws IOException {
System.out.println("Input the directory that you want to enter: ");
==String dir = FileManager.sc.next();==
Runtime.getRuntime().exec("explorer.exe" + dir);
}
}