【问题标题】:Get data from console in string [duplicate]从字符串中的控制台获取数据[重复]
【发布时间】:2014-08-01 07:09:00
【问题描述】:

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

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

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

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

【问题讨论】:

标签: java


【解决方案1】:

除非您正在开发一个非常具体的应用程序,否则System.console() 返回的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

虚拟机是否具有控制台取决于底层平台以及调用虚拟机的方式。如果虚拟机从交互式命令行启动而不重定向标准输入和输出流,那么它的控制台将存在,并且通常会连接到启动虚拟机的键盘和显示器。如果虚拟机是自动启动的,例如通过后台作业调度程序,那么它通常不会有控制台。

正如其他答案和 cmets 建议的那样,您应该使用 System.in,因为 Scanner 是一个易于使用的工具来读取行和标记。

【讨论】:

  • 很好的解释为什么它不起作用!
【解决方案2】:

为此使用Scanner

Scanner sc = new Scanner(System.in);
String st = sc.next();

您可以使用sc.nextInt() 从控制台获取整数值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多