System.console()NullPointerException异常
问题描述:
这里是我的代码:System.console()NullPointerException异常
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));
为什么我geeting这个错误?
输入用户名:
异常在线程 “主” 显示java.lang.NullPointerException在Cons.main(Cons.java:13)
答
根据JavaDoc:
返回与当前Java虚拟机关联的唯一控制台对象(如果有)。如果没有与javadoc关联的控制台,则指向的线是空对象上方法的调用,因此是例外。
如何启动您的应用程序?
无论是虚拟机具有控制台取决于 底层平台,也取决于在其中虚拟机 被调用的方式。如果虚拟机从 交互式命令行启动而不重定向标准输入和 输出流,则其控制台将存在,并且通常将连接到启动虚拟机 的键盘和显示器的 。如果虚拟机自动启动,对于后台作业调度程序的示例 ,则它通常不具有控制台 。采取输入
最好的办法是,
如果你想阅读从标准输入的用户名,你可以使用此代码:
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();
}
答
这是因为System.console()
被返回null。官方文档状态(粗体是我的强调):
公共静态console控制台()
返回与当前Java虚拟机相关联的唯一Console对象(如果有)。
返回: 系统控制台,如果有的话,否则为空。
你可以看到here
答
你应该使用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);
}
}
答
String unm=System.console().readLine();
您应该先在system.console空校验。在没有控制台关联的平台上,这个应用程序将死于空指针异常。
对任何控制台是否可用进行空检查。如果没有,请阅读扫描仪
String userName;
char[] password;
Scanner scanner = null;
Console console = System.console();
if(console == null){
scanner = new Scanner(System.in);
System.out.println("Enter username: ");
userName = scanner.next();
//Read Password as well
}else{
System.out.println("Enter username: ");
userName = console.readLine();
//Read password as well
}
注:
- 一个与控制台的优势,特别是在读取密码,它不会显示在屏幕上。使用扫描仪,您的密码将显示在屏幕上。
- 上面的代码片段用于演示目的。
该:13意味着第13行,在未来它可以帮助,如果你告诉我们这是哪一行:) – user1445967
看看这里http://stackoverflow.com/questions/26078106/system-console-gives-nullpointerexception -in-的NetBeans – Zia