下面是我的代码:
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中出现异常
发布于 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();
}
发布于 2016-01-01 18:08:03
这是因为System.console()
返回null。官方文档声明(我要强调的是粗体):
公共静态控制台()
返回与当前Java虚拟机关联的唯一控制台对象(如果有)。
返回:系统控制台,如果有,返回,否则返回空。
你可以在here上看到它。
发布于 2016-01-01 18:08:57
您应该使用BufferedReader
或Scanner
类从控制台读取输入。
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);
}
}
https://stackoverflow.com/questions/34555185
复制相似问题