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)

+0

该:13意味着第13行,在未来它可以帮助,如果你告诉我们这是哪一行:) – user1445967

+2

看看这里http://stackoverflow.com/questions/26078106/system-console-gives-nullpointerexception -in-的NetBeans – Zia

根据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

你应该使用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); 
    } 
} 

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 
    } 

注:

  • 一个与控制台的优势,特别是在读取密码,它不会显示在屏幕上。使用扫描仪,您的密码将显示在屏幕上。
  • 上面的代码片段用于演示目的。