2016-03-04 33 views
0

我怎樣才能讀取每一次在java行輸入? 如果使用掃描儀,而另一個線程寫入內容則會中斷。 :(閱讀控制檯沒有中斷如果寫東西

錯誤的例子:

Console output: (write hello) 
helI'm a thread and I break your sentence! 
lo 

我知道我可以緩衝的System.out,但它應該每次讀,所以當我應該寫緩衝輸出

+0

掃描儀對象(通常)持有執行,直到你給他們一些東西。所以,您的掃描儀對象可能會從其他線程獲得輸入。 –

+0

你的意思是你能檢測到控制檯有輸入嗎? –

+0

是的,掃描儀拿着它。如果我在char上寫入,它將發送一切垃圾信息,其中holdem ^^ – Shapci

回答

0

與此類嘗試?

public class Console { 

private enum Mode { READ_LINE, PRINT_LINE, PRINT }; // TODO: add more Input & Output Modes 
private Scanner scanner; 

public Console() { 
    scanner = new Scanner(System.in); 
} 

public String getUserInput() { 
    return synchronizedIo(Mode.READ_LINE, null); 
} 

public void printLine(String text) { 
    synchronizedIo(Mode.PRINT_LINE, text); 
} 

public void print(String text) { 
    synchronizedIo(Mode.PRINT, text); 
} 

private synchronized String synchronizedIo(Mode mode, String text) { 
    if (mode == Mode.READ_LINE) { 
     return scanner.nextLine(); 
    } else if (mode == Mode.PRINT_LINE) { 
     System.out.println(text); 
    } else if (mode == Mode.PRINT) { 
     System.out.print(text); 
    } 
    return null; 
} 
} 

做你的輸入和輸出使用這些方法,並輸入和輸出不應弄混並從控制檯。

Console c = new Console(); 
c.print("Input: "); 
String input = c.getUserInput(); 
c.printLine("Entered text: " + input); 

注意:在閱讀用戶輸入時,打印方法將阻止任何調用線程。