3

Visual Prologで生成された実行可能ファイルをプロセスとして実行することにより、Javaを追加しようとしています。

この回答を使用して、プロセスの相互作用を実装しました。私の Visual Prolog は、コマンド ラインからの数値を期待し、(それが Prolog 用語であるかどうかにかかわらず) 検証も行いますが、Java から実行すると、入力が有効であると認識しません。それらのスケープ文字は私の番号を文字列に変えていますか?

それらを削除しようとすると、Java プログラムがハングし、Visual Prolog 実行可能ファイルが応答しません。エンターボタンを押すようなものだと思います。

4

4 に答える 4

1

\r\n は、Windowsの EOL (行末) シーケンスです。

入力が行単位で読み取られる場合、消費するコードは EOL (または EOF) が送信されるまでその行を処理しません。これにより、コンシューマーが残りの行を辛抱強く待っている間、「ハング」したように見えます。Java の Scanner.nextLine を検討してください。nextLine は、完全な行の準備ができるまで返されません!

解決策:適切な入力を含む EOL を Visual Prolog に送信します。または入力ストリームを閉じます。


おそらく"line.separator"も参照してください。ただし、さまざまなprintln(print line ) メソッドには、適切な EOL が既に含まれている必要があります。

于 2013-12-22T04:58:31.537 に答える
0

\r は改行 CR \n は改行 LF

多くのテキスト プロトコルでは CR+LF を使用する必要があり、一部は LF で認識する必要があります。

Windows のテキストで改行を開始するようなものです

于 2013-12-22T04:33:00.107 に答える
0

参照されている例では、プロセス間で通信するためにパイプ (stdin と stdout をリダイレクト) を使用していますが、プログラムはコマンド ラインで数値を期待していると述べています。

于 2016-01-18T12:57:08.007 に答える
0

ターゲット プロセスで必要な場合にのみ必要です。

プロセスには「コマンドラインからの数値が必要」であると述べていますが、「stdin」を介して入力を供給している場合はそうではありません。

代わりに、コンソールに入力された行を介して番号が必要なようです。

いずれの場合も、'line' という単語は、行末記号が必要であることを示しています。

于 2013-12-22T05:12:34.943 に答える