我正在尝试使用System.console().readline();
从我的控制台检索字符串
但是当我运行程序来获取字符串时,它会引发异常。
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
如何从控制台获取数据并将其放入字符串中? 这就是我的尝试:
String response = System.console().readline();
System.out.println(response);
答案 0 :(得分:2)
为此目的使用Scanner
。
Scanner sc = new Scanner(System.in);
String st = sc.next();
您可以使用sc.nextInt()
从控制台获取整数值。
答案 1 :(得分:2)
除非您正在开发一个非常具体的应用程序,Console
返回的System.console()
对象不是您应该用来检索用户输入的对象。
这是System.console()
定义:
/**
* Returns the unique {@link java.io.Console Console} object associated
* with the current Java virtual machine, if any.
*
* @return The system console, if any, otherwise <tt>null</tt>.
*
* @since 1.6
*/
public static Console console() {
if (cons == null) {
synchronized (System.class) {
cons = sun.misc.SharedSecrets.getJavaIOAccess().console();
}
}
return cons;
}
它可能返回null
:返回与当前Java虚拟机关联的唯一对象, (如果有)。
Here您可以找到原因null
:
虚拟机是否具有控制台取决于底层平台以及虚拟机的调用方式。如果从交互式命令行启动虚拟机而不重定向标准输入和输出流,则其控制台将存在,并且通常将连接到启动虚拟机的键盘和显示器。如果虚拟机是自动启动的,例如后台作业调度程序,则通常没有控制台。
正如其他答案和评论所示,您应该使用System.in
,Scanner
这是一个易于使用的工具来读取线条和代币。