java - 当进程在后台运行时,使用 java.io.InputStreamReader 从标准输入读取会挂起

标签 java

我正在编写一个具有多个线程的 Java 程序。其中一个线程负责从标准输入读取行并解析它们。

正常运行时一切正常,但是当程序在后台(在 Linux 中)运行时使用:

$ java -jar my_jar_file &

我的程序挂起(至少在进入前台之前)。

在后台运行时,我实际上并不需要标准输入,但我也不希望我的程序挂起。

我搜索了一种以编程方式确定进程是否在后台运行的方法,但找不到它。

这是从标准输入读取的代码:

InputStreamReader inputStreamReader = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(inputStreamReader);

String line = null;

try {
  while ((line = br.readLine()) != null) {
    parseInputLine(line, br);
  }
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}

据我所知,程序在到达 br.readLine() 命令时挂起。

最佳答案

我猜读者正在阻塞等待输入,您也许可以从命令行通过管道输入输入

关于java - 当进程在后台运行时,使用 java.io.InputStreamReader 从标准输入读取会挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18384233/

相关文章:

Java VM - Eclipse 使用我的内核?

java - 找不到支持运行固定数量的步骤然后暂停的语言(-解释器)

java - 有没有一个java库可以将XML(LOM)绑定(bind)到XML+RDF?

java - 关于本地类的矛盾陈述,哪一个是正确的?

java - 从枚举调用函数

java - 在 Java/Eclipse 中构建时复制数据文件

java - 使用 java 从图像中提取文本

java - 解析日期时间字符串与各种浏览器的时区

java - 如何正确管理 Reactor 中的可关闭资源

java - 将文件的路径发送到谷歌驱动器