2016-01-01 223 views
0

這裏是我的代碼: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

回答

1

根據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(); 
} 
1

這是因爲System.console()被返回null。官方文檔狀態(粗體是我的強調):

公共靜態console控制檯()

返回與當前Java虛擬機相關聯的唯一Console對象(如果有)。

返回: 系統控制檯,如果有的話,否則爲空

你可以看到here

0

你應該使用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
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 
    } 

注:

  • 一個與控制檯的優勢,特別是在讀取密碼,它不會顯示在屏幕上。使用掃描儀,您的密碼將顯示在屏幕上。
  • 上面的代碼片段用於演示目的。