我正在尝试通过将 Java 作为进程运行来将其添加到 Visual Prolog 生成的可执行文件中。
我已经使用这个答案来实现流程交互。我的 Visual Prolog 需要来自命令行的数字,它甚至会验证它(无论它是否是 Prolog 术语),但是从 Java 运行时,它不会将输入识别为有效。那些转义字符是否将我的号码变成了字符串?
当我尝试删除它们时,我的 Java 程序挂起并且 Visual Prolog 可执行文件没有响应。我认为这就像按下回车键。
我正在尝试通过将 Java 作为进程运行来将其添加到 Visual Prolog 生成的可执行文件中。
我已经使用这个答案来实现流程交互。我的 Visual Prolog 需要来自命令行的数字,它甚至会验证它(无论它是否是 Prolog 术语),但是从 Java 运行时,它不会将输入识别为有效。那些转义字符是否将我的号码变成了字符串?
当我尝试删除它们时,我的 Java 程序挂起并且 Visual Prolog 可执行文件没有响应。我认为这就像按下回车键。
\r\n 是 Windows 中的EOL(行尾)序列。
如果输入是面向行读取的,那么在发送 EOL(或 EOF)之前,消费代码不会处理该行 - 这将使消费者看起来“挂起”,而它实际上只是在耐心地等待行的其余部分。考虑 Java 中的 Scanner.nextLine:nextLine直到准备好整行才会返回!
解决方案:将带有适当输入的 EOL 发送到 Visual Prolog ;或关闭输入流。
另请参见"line.separator",也许。但是,各种println
(打印行)方法应该已经包括适当的 EOL。
当且仅当目标进程需要它时,它才是必要的。
您声明您的进程“需要命令行中的数字”,但是如果您通过其“stdin”输入它,则情况并非如此。
相反,它似乎需要通过输入到控制台的行来输入数字。
在任何一种情况下,单词“line”都表示需要行终止符。
\r 是回车 CR \n 是换行 LF
许多文本协议要求您使用 CR+LF,有些需要在 LF 上识别。
这就像在 Windows 中的文本中开始一个换行符
引用的示例是使用管道(重定向标准输入和标准输出)在进程之间进行通信,但您说您的程序需要命令行上的数字。