除非您正在開發一個非常特定的應用程序,否則System.console()
返回的Console
對象不是您應該用來檢索用戶輸入的對象。
這是System.console()
定義:
/**
* Returns the unique {@link java.io.Console Console} object associated
* with the current Java virtual machine, if any.
*
* @return The system console, if any, otherwise <tt>null</tt>.
*
* @since 1.6
*/
public static Console console() {
if (cons == null) {
synchronized (System.class) {
cons = sun.misc.SharedSecrets.getJavaIOAccess().console();
}
}
return cons;
}
它可能返回null
:返回如果任何與當前Java虛擬機相關的唯一對象。
Here你可以找到它爲什麼可以null
的原因:
無論虛擬機具有控制檯取決於底層平臺,還取決於在該虛擬機被調用的方式。如果虛擬機從交互式命令行啓動而不重定向標準輸入和輸出流,則其控制檯將存在,並且通常會連接到啓動虛擬機的鍵盤和顯示器。如果虛擬機是自動啓動的,例如通過後臺作業調度程序,那麼它通常沒有控制檯。
至於其他的答案和意見建議,你應該使用System.in
,是Scanner
一個易於使用的工具來讀取線和令牌。
嘗試使用掃描儀,http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html。您可以創建一個新的掃描器(Systsem.in),然後使用.next()獲取字符串(並檢查輸入是否可用.hasNext()) – Pphoenix
您是否想要讀取輸入?或任何文字? –
閱讀本文:http://stackoverflow.com/questions/8560395/how-to-use-readline-in-java –