2014-06-11 20 views
0

我想從我的控制檯檢索一個字符串與System.console().readline(); 但當我運行程序來獲取字符串它會引發異常。從控制檯獲取數據字符串

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 

如何從我的控制檯獲取數據並將其放入字符串中? 這是我的嘗試:

String response = System.console().readline(); 
System.out.println(response); 
+7

嘗試使用掃描儀,http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html。您可以創建一個新的掃描器(Systsem.in),然後使用.next()獲取字符串(並檢查輸入是否可用.hasNext()) – Pphoenix

+0

您是否想要讀取輸入?或任何文字? –

+0

閱讀本文:http://stackoverflow.com/questions/8560395/how-to-use-readline-in-java –

回答

2

使用Scanner用於這一目的。可以使用sc.nextInt()從控制檯獲取整數值。

2

除非您正在開發一個非常特定的應用程序,否則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一個易於使用的工具來讀取線和令牌。

+0

很好的解釋爲什麼它不起作用! – Pphoenix