2016-02-05 36 views
4

我想知道如何控制控制檯打印格式。我的問題是我有2個線程,其中一個不斷向控制檯輸出信息,另一個不斷向用戶提供信息,但在寫入時如果另一個線程打印某些內容,則會切斷用戶正在寫入的內容並分割它。你如何控制它?同時向控制檯寫入數據java中的printinf信息

我的線程1的代碼:

//Definition of variables 

while (exit == false) { 
    scanner = new Scanner(System.in); 
    message = scanner.nextLine(); 
} 

//Code to use user input 

我線程2的代碼:

//Definition of variables 

while (receive.getExecutingState()) { 
    srvMsg = receive.Receive(); 
    System.out.println(srvMsg); 
} 

控制檯輸出:

No more data to show. 
No more data to show. 
hNo more data to show. 
eNo more data to show. 
llo 

我希望它保持印刷,而用戶的消息寫數據,但不要分割它正在寫的內容。

提前致謝!

編輯:正如@Thomas所說,我想要一個更清晰的方式,是保持用戶在控制檯底部寫入的文本,其餘的內容正在更新。

+1

這可能與命令行的工作方式相比,更多地與您在Java中必須執行的操作有關。 – Thomas

+0

但是,只要它在Linux中與Windows相同的問題,它需要通過Java編程來解決,我認爲它不僅僅與控制檯相關@Thomas –

+0

問題是它可能無法通過Java編程解決而Linux和Windows中的問題相同則表明命令行不能以這種方式工作。 – Thomas

回答

1

一種方法是逐個讀取了用戶的角​​色:

  • 讓寫線程寫入
  • ,如果用戶輸入一個字符(或更多)暫停寫線程,直到用戶按通過使用進入
  • 當用戶按下回車,重新開始寫線程

暫停/恢復機制可以通過多種方式來完成,例如其中一個許可證由閱讀線或書寫線依次取得。

+0

這就是我所想的,但要求似乎是這樣做的:「我希望它能夠保留打印郵件,用戶寫入數據「。 – Thomas

+0

嗯 - 這有點令人困惑:你怎麼寫和不寫在同一時間? – assylias

+0

是的,這也讓我感到困惑。我猜他的意思就像你輸入的文字顯示在底部,而頂部不斷更新。 – Thomas