首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >System.console() NullPointerException

System.console() NullPointerException
EN

Stack Overflow用户
提问于 2016-01-01 18:03:16
回答 5查看 10.6K关注 0票数 2

下面是我的代码:

System.out.println("Enter Username: ");
String unm=System.console().readLine();

System.out.println("Enter Password: ");
char[] pwd=System.console().readPassword();

System.out.println("Welcome: " + "" + " Your password is " + new String(pwd));

为什么我会得到这个错误?

输入用户名:在Cons.main(Cons.java:13)

的线程"main“java.lang.NullPointerException中出现异常

EN

回答 5

Stack Overflow用户

发布于 2016-01-01 18:07:41

在Javadoc中:

返回与当前Java虚拟机相关联的唯一控制台对象(如果有)。

如果没有与JVM相关联的控制台,则指向的行是对空对象上的方法的调用,因此出现异常。

您如何启动您的应用程序?

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

如果想要从标准输入中读取用户名,可以使用以下代码:

try {
    System.out.print("Enter Username: ");
    InputStreamReader streamReader = new InputStreamReader(System.in);
    BufferedReader bufferedReader = new BufferedReader(streamReader);
    String username = bufferedReader.readLine();
} catch (IOException e) {
    e.printStackTrace();
}
票数 4
EN

Stack Overflow用户

发布于 2016-01-01 18:08:03

这是因为System.console()返回null。官方文档声明(我要强调的是粗体):

公共静态控制台()

返回与当前Java虚拟机关联的唯一控制台对象(如果有)。

返回:系统控制台,如果有,返回,否则返回空

你可以在here上看到它。

票数 3
EN

Stack Overflow用户

发布于 2016-01-01 18:08:57

您应该使用BufferedReaderScanner类从控制台读取输入。

BufferedReader:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class ReadConsoleSystem {
  public static void main(String[] args) {

    System.out.println("Enter something here: ");

    try {
        BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
        String s = bufferRead.readLine();

        System.out.println(s);
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
  }
}

扫描程序:

import java.util.Scanner;

public class ReadConsoleScanner {

  public static void main(String[] args) {

    System.out.println("Enter something here: ");

    String sWhatever;

    Scanner scanIn = new Scanner(System.in);
    sWhatever = scanIn.nextLine();

    scanIn.close();
    System.out.println(sWhatever);
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34555185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档