2017-06-11 58 views
-1

我一直在試圖製作一個監視器java程序,在同時接受用戶輸入時從併發線程打印出一些統計信息。我面臨的問題是,如果一個用戶正在編寫一個長命令「create file/home/user/etc」,並且一個併發線程發生在他的命令中間打印出一些消息。他的命令將被削減一半,我知道不會影響我得到的實際輸入,但它會毀壞用戶界面。爲什麼我的bash輸入在輸入之前與我的程序輸出混合?

A terminal picture to illustrate the problem在這張照片我是atempting寫 「爲什麼會被打斷這種保持????」你可以看到會發生什麼。

那麼,如何可以從輸出的命令行分開,以便同時保持雙方在同一窗口中它並不會中斷?

我在膩子上使用bash,如果這是相關的。 我感謝所有幫助。

+0

據我所知,你運行一些運行併發線程的程序,然後運行你的監控程序。爲了解決問題,您可以在控制檯的另一個選項卡中運行監控程序。 –

+0

這實際上並沒有解決問題。我的問題是我想讓程序獲得用戶輸入並同時顯示任何背景消息。我知道這可以做到,因爲我已經看到Java程序這樣做。感謝您試圖幫助:) –

回答

1

據我所知,你試圖做的事是不可能的。您可以考慮幾種不同的選項:

1)使用java庫(例如jcurses)。

2)只將數據寫出到文件中。

3)創建一個帶有單獨的輸入和輸出文本字段/區域的Java GUI。

+0

我認爲它可能是因爲我在其他Java程序中看到它。就像一個龍頭Minecraft服務器,例如你寫的命令不會與控制檯輸出混合 –

+0

@xunatai是正確的,這是終端工作的標準方式。因此建議使用ncurses,這是一個以任意方式操作終端數據的庫。您可能可以打開原始模式(不知道是否有任何readline庫會提供幫助),然後跟蹤用戶正在寫入的字符。有輸出擦除當前行,寫入輸出,然後重寫用戶在做什麼(佔輸出期間的字符輸入等)。 –

+0

@MichaelSpeer你說的話很有道理。它的東西,我試圖做,但我找不到任何方式來擦除當前行或甚至跟蹤用戶輸入前輸入的字符。我已經閱讀了關於輸出流和輸入流的所有文檔,但是終端似乎有某種內置緩衝區,可以防止在發送「\ n」字符之前發送任何輸入。 –

相關問題