这是我的代码:
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));
为什么我要纠结这个错误?
输入用户名:
线程中的异常" main" Cons.main(Cons.java:13)
中的java.lang.NullPointerException
答案 0 :(得分:2)
来自javadoc:
返回与当前Java关联的唯一Console对象 虚拟机,如果有的话。如果没有与之关联的控制台 javadoc,指向的行是对null对象的方法调用, 因此例外。
如何启动申请?
虚拟机是否具有控制台取决于 底层平台以及虚拟的方式 机器被调用。如果虚拟机是从一个启动的 交互式命令行,无需重定向标准输入和 输出流然后它的控制台将存在并且通常是 连接到键盘和显示虚拟机的显示器 已启动,推出。如果虚拟机自动启动,则为 例如,后台作业调度程序,它通常没有 控制台。
获取输入的最佳方式是,
如果您想从标准输入中读取用户名,可以使用以下代码:
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();
}
答案 1 :(得分:2)
这是因为System.console()
返回null。官方文件说明(粗体是我的强调):
public static Console console()
返回与当前Java虚拟机关联的唯一Console对象(如果有)。
返回: 系统控制台(如果有)否则为空。
您可以看到here
答案 2 :(得分:0)
您应该使用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);
}
}
答案 3 :(得分:0)
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
}
注意:
答案 4 :(得分:0)
如果仅需要输入用户名,则链接http://stackoverflow.com/questions/26078106/system-console-gives-nullpointerexception-in-netbeans提供的答案就足够了。但是,您还需要安全输入密码。为此,您提供的代码非常好。您只需要编译项目并在 Console 或 Terminal 中运行它,而不是您的 IDE 。例如。如果您使用的是 Windows 和 Netbeans ,请通过单击Run > Build Project
菜单项来构建项目。这将创建一个与项目名称相同的.jar
文件。现在打开一个cmd
窗口,导航到.jar
文件所在的路径,然后通过键入java -jar YourProjectName.jar
命令执行项目(将YourProjectName
替换为项目名称) )。