的Javadoc說爲什麼它返回null
控制檯
公共靜態console控制檯()
返回與當前Java虛擬機相關聯的唯一Console對象(如果有)。
返回:系統控制檯,如果有的話,否則爲空。
由於: 1.6
IntelliJ IDEA的回報與System.console
空太,所以你唯一可以做的事情是創建兩個方法(一個用於讀取線,一個密碼,因爲System.console有readPassword法)這可以幫助您在切換到IDE到生產時避免出現問題。
public static String readLine() throws IOException
{
if (System.console() != null)
{
return System.console().readLine();
}
else
{
return new BufferedReader(new InputStreamReader(System.in)).readLine();
}
}
public static char[] readPassword() throws IOException
{
if (System.console() != null)
{
return System.console().readPassword();
}
else
{
return readLine().toCharArray();
}
}
我選擇保持char []方式爲readPassword,但如果你想要,你可以將它轉換爲字符串。
您可以在內存中保持System.console參考,以避免重複調用控制檯(),這是syncronized方法(在我的源代碼至少)
public static String readLine() throws IOException
{
Console console = System.console();
if (console != null)
{
return console.readLine();
}
else
{
return new BufferedReader(new InputStreamReader(System.in)).readLine();
}
}
public static char[] readPassword() throws IOException
{
Console console = System.console();
if (console != null)
{
return console.readPassword();
}
else
{
return readLine().toCharArray();
}
}
您是否閱讀過'System.console()'的javadoc? –
看起來'c'是'null',這意味着你不是在像cmd這樣的控制檯中執行Java應用程序,而是在IDE控制檯中執行。 –
[系統控制檯,如果有,否則爲空。](http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#console%28%29) – Brian