从字符串中获取控制台中的数据

时间:2014-06-11 09:28:49

标签: java

我正在尝试使用System.console().readline();从我的控制台检索字符串 但是当我运行程序来获取字符串时,它会引发异常。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

如何从控制台获取数据并将其放入字符串中? 这就是我的尝试:

String response = System.console().readline();
System.out.println(response);

2 个答案:

答案 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.inScanner这是一个易于使用的工具来读取线条和代币。