2013-03-16 63 views
0

我已經做了一些研究,但我什麼也沒找到。Java:NoSuchElementException當閱讀控制檯

因此,這裏是我的代碼:

public void play(){ 
    System.out.print("Make your choice (R - P - S) : "); 
    Scanner sc = new Scanner(System.in); 
    char choice = sc.next().charAt(0); 
    setChoice(choice); 
    sc.close(); 
} 

我第一次進入該功能,一切都很好,但接下來的時間,在我的函數的第3行拋出NoSuchElementException。 另一件事:當我刪除sc.close()行時,問題消失,但我想保留該行。

任何解決方案?謝謝

回答

3

如果關閉Scanner,它也將關閉底層輸入流,即System.in。所以你不能關閉它。

0

不要靠近掃描儀是問題here.it將關閉底層輸入流

sc.close(); 
+0

好的,謝謝你們。所以我刪除sc.close()行,但我仍然有警告'資源泄漏:'sc'永遠不會關閉'。什麼是正確的解決方案? – 2013-03-16 12:54:07

0

Scanner.close

如果此掃描器尚未關閉,並且其底層 readable也實現可關閉的接口則會調用可讀的關閉方法。如果此掃描儀已關閉,則調用此方法的 將不起作用。

System.inInputStream它實現Closeable

這意味着上sc主叫close()調用的System.inclose()方法,其中關閉該輸入流並釋放與它相關聯的所有系統資源。