2012-12-19 54 views
1

我使用java.util.Scanner來從控制檯讀取命令。java.util.Scanner:等待輸入

try 
{ 
    ICommand cmd = cmdReader.ReadCommand(); 
    cmd.Execute(conn); 
} 
catch(MyException ex) 
{ 
    // print a message about unknown command 
    continue; 
} 

ReadCommand被實現如下:

try (Scanner scanIn = new Scanner(System.in)) 
{ 
    if (!scanIn.hasNextLine()) return null; 

    line_ = scanIn.nextLine(); 

    ICommand command = parser_.ParseCommand(line_); 
    return command; 
} 

在第一次迭代代碼工作正常,我寫的東西無效(不是命令),代碼打印警告並繼續。但是,即使我在控制檯中寫入某些內容,其他迭代也會在此返回nullif (!scanIn.hasNextLine()) return null;。看起來像java.util.Scanner沒有看到輸入。難道我做錯了什麼?那我怎麼能等待用戶輸入(不想用sleep這個循環)?

回答

5

每當您撥打ReadCommand時,都不應創建新的Scanner實例。創建一個並在閱讀輸入時重複使用它。

documentation

當掃描儀被關閉時,它會如果源實現Closeable接口,關閉其輸入源。

因此,您的System.in流在您讀取第一個輸入後關閉。請參閱Java Scanner does not wait for input