2017-06-11 4 views
-1

私は同時にユーザー入力を取っている間に同時スレッドからいくつかの統計を出力するモニターJavaプログラムを作成しようとしています。私が直面している問題は、ユーザーが長いコマンド "ファイル/ home/user/etcを作成する"を作成していて、同時スレッドがコマンドの途中でいくつかのメッセージを出力した場合です。彼のコマンドは半分にカットされて、実際のインプットには影響しませんが、それはユーザーインターフェースを破壊します。なぜ私のbash入力が入力を打つ前に私のプログラムの出力と混ざり合っていますか?

A terminal picture to illustrate the problem この写真では、私は「これはなぜ中断され続けるのですか」と書こうとしていませんでしたか?あなたは何が起こるか見ることができます。

どのように私は出力からコマンドラインを分けることができるので、同じウィンドウに両方を維持している間に中断しないのですか?

これは関連する場合、私はパテのbashを使用しています。 私はすべての助けに感謝します。

+0

私は同時スレッドを実行するプログラムを実行した後、監視プログラムを実行することを理解しています。問題を解決するには、コンソールの別のタブで監視プログラムを実行するだけです。 –

+0

実際には問題は解決しません。私の問題は、私は、プログラムがユーザーの入力を取得し、同時に任意のバックグラウンドメッセージを表示することです。私はjavaプログラムがそれをするのを見たので、これができることがわかります。助けてくれてありがとう:) –

答えて

1

私が分かる限り、あなたがしようとしていることは不可能です。あなたが考えることのできるいくつかのオプションがあります。

1) Javaライブラリ(jcursesなど)を使用してください。

2)データのみをファイルに書き出します。

3)入力と出力のテキストフィールド/エリアを別々にしてJava GUIを作成します。

+0

私は他のJavaプログラムでそれを見ているので、私は可能だと思う。たとえば、あなたが書いているコマンドがコンソール出力と混ざらないような、スピゴットミニクラフトサーバのようなものです。 –

+0

@xunataiは正しいです、これは端末の標準的な仕組みです。したがって、ターミナルデータを任意の方法で操作するためのライブラリであるncursesの提案。 rawモード(readlineライブラリが役立つかどうかわからない)をオンにして、ユーザが書いている文字を追跡することができるかもしれません。出力には現在の行を消去し、出力を書き込んだ後、途中でユーザが何をしていたかを書き換えます(出力中の文字の入力など)。 –

+0

@MichaelSpeerあなたが言ったことは完璧な意味を成し遂げました。私は何をしようとしましたが、現在の行を消去する方法や、ユーザーが入力する前に入力されている文字を追跡する方法を見つけることができません。私は出力ストリームと入力ストリームに関するすべてのドキュメントを読んだが、端末には、何らかの形で "\ n"文字が送信されるまで入力が送られないようにバッファが組み込まれているようだ。 –

関連する問題