Java process.getInputStream() 没有任何内容可读取,子进程死锁

2024-02-20

我在某些进程包装方面遇到问题,并且该问题仅发生在 Windows XP 中。这段代码在 Windows 7 中完美运行。我真的很困惑为什么 XP 中的流是空的。我也尝试过使用 Process.Exec() 的 String[] 版本,但没有什么区别。

我使用以下类从进程的 STDOUT 和 STDERR 中读取(每个流的一个实例):


import java.util.*;
import java.io.*;

public class ThreadedStreamReader extends Thread{
 InputStream in;
 Queue messageQueue;

 public ThreadedStreamReader(InputStream s, Queue q)
 {
  in = s;
  messageQueue = q;
 }

 public void run()
 {
  try
  {
   BufferedReader r = new BufferedReader(new InputStreamReader(in));
   String line = null;
   while((line = r.readLine()) != null)
   {
    synchronized(messageQueue)
    {
     messageQueue.add(line);
    }
   }

  }catch(Exception e)
  {
   System.err.println("Bad things happened while reading from a stream");
  }
 }
}

我在这里使用它:


Process p = Runtime.getRuntime().exec("test.exe");
Queue&ltString;> q = new LinkedList&ltString;>();

ThreadedStreamReader stdout = new ThreadedStreamReader(p.getInputStream(), q);
ThreadedStreamReader stderr = new ThreadedStreamReader(p.getErrorStream(), q);

stdout.start();
stderr.start();

while(true)
{
    while(q.size() > 0)
    {
        System.out.println(q.remove());
    }
}

有人有主意吗?谢谢!

编辑:添加同步

编辑:就像更新一样,父流读取器的读取操作被阻止。如果我使用任务管理器终止子进程,它们会从流的关闭中读取空值。


你需要使用线程安全的数据结构;我不认为链表是线程安全的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java process.getInputStream() 没有任何内容可读取,子进程死锁 的相关文章

  • 如何对这个字符串进行子串化

    我想得到这个字符串的 4 个部分 String string 10 trillion 896 billion 45 million 56873 我需要的4个部分是 10万亿 8960亿 4500万 和 56873 我所做的是删除所有空格 然
  • Spring boot JPA不使用findById返回现有结果

    我使用 Oracle 数据库和一些 JPA 查询创建了一个非常小且简单的 Spring Boot 应用程序 这是不返回数据的代码片段 该数据实际上存在于数据库中 letterRecipientNonOas letterRecipientNo
  • 时间序列中的峰值检测

    我目前正在开展一个小项目 我想在其中比较两个时间序列 相似性度量确实很模糊 如果两个时间序列大致具有相同的形状 则它们被认为是相似的 所以我心想 如果它们只需要具有相同的形状 我只需比较两个时间序列的峰值 如果峰值位于相同的位置 那么时间序
  • 无法在 Eclipse IDE 中使用 java 建立与 SQL Server 2008 的数据库连接

    我正在尝试在 Eclipse IDE 中使用 Java 代码连接到 HP Operations Manager 数据库 我能够通过 Microsoft SQL Server Management Studio 2008 成功连接 但通过代码
  • jdbctemplate计数queryForInt并传递多个参数

    如何传入多个参数jdbcTemplate queryForInt得到计数 我试过这个 Integer count this jdbcTemplate queryForInt select count name from table name
  • 对卡在 CLOSE_WAIT 状态的连接进行故障排除

    我有一个在 Windows 上的 WebLogic 11g 中运行的 Java 应用程序 几天后它变得没有响应 我注意到的一个可疑症状是大量连接 大约 3000 个 出现在netstat即使服务器空闲 也具有 CLOSE WAIT 状态 由
  • hibernate外键问题:执行DDL“alter table...”时出错

    我有一个非常简单的对象结构 它给了我一个我无法解决的错误 已经做了很多搜索 我认为这一定是一个非常常见的用例 所以不确定问题是什么 我有这三个课程 Entity public class Widget Id GeneratedValue s
  • Java 中等效的并行扩展

    我在 Net 开发中使用并行扩展有一些经验 但我正在考虑在 Java 中做一些工作 这些工作将受益于易于使用的并行库 JVM 是否提供任何与并行扩展类似的工具 您应该熟悉java util concurrent http java sun
  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • JavaMail 只获取新邮件

    我想知道是否有一种方法可以在javamail中只获取新消息 例如 在初始加载时 获取收件箱中的所有消息并存储它们 然后 每当应用程序再次加载时 仅获取新消息 而不是再次重新加载它们 javamail 可以做到这一点吗 它是如何工作的 一些背
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat

随机推荐

  • 在 MVC4 中使用 DotNetOpenAuth 的 LinkedIn 完整个人资料详细信息

    我的 MVC4 应用程序允许使用 LinkedIn 帐户登录 我想提取登录用户的 linkedIn 中可用的所有详细信息 目前我做了以下工作 在我的 AuthConfig cs 中 Dictionary
  • Scala 宏:类型化(又名类型检查)树和非类型化树之间有什么区别

    我正在开始使用 scala 宏 它们非常棒 但是我遇到了类型化 又名类型检查 和非类型化之间的区别Trees 例如 您不能调用c eval由于某种原因使用类型检查的树 我在 scala 宏文档中找不到关于此 类型检查 的文档 我知道他们仍在
  • Angularjs如何在切换路由时取消资源承诺

    我刚刚接触 Angularjs 我有一个问题 我认为与承诺有关 假设我加载路由 A 它通过其控制器发出多个 ajax 请求 allSites AllSites query id categoryID allSites promise the
  • 如何在没有映射到 web.xml 的情况下调用 servlet?

    如何使用以下 URL 调用简单的 servlet http localhost 8080 servlet MyServlet http localhost 8080 servlet MyServlet 我把它放在文件夹中 tomcat we
  • 获取系统插入的正确方法

    我一直在使用view rootWindowInsets stableInsetTop和 Bottom 来获取状态栏和导航栏的高度 但是现在已弃用 并且文档建议使用 https developer android com reference
  • 将数据从 C# 传递到 jQuery

    我是一名独立程序员 正在寻求如何最好地处理以下情况的建议 我目前正在开发一个 C Winforms 应用程序 我正在编写的新功能允许用户创建Processing js 草图以进行数据分析 我构建了一个Processing js IDE 正在
  • 使用包含 NSDictionary 的 NSMutableArray 进行快速枚举

    是否可以对包含 NSDictionary 的 NSArray 使用快速枚举 我正在运行一些 Objective C 教程 以下代码将控制台踢入 GDB 模式 NSMutableArray myObjects NSMutableArray a
  • GIT_MERGE_AUTOEDIT=默认为否

    在我的 git v 1 7 10 2 中 我必须在终端中执行以下操作 GIT MERGE AUTOEDIT no export GIT MERGE AUTOEDIT 所以 每次合并时 我都不会强制发布消息 我应该把它放在哪里 这样默认情况下
  • C++ 流作为成员变量

    我有一个 C 类 我想保存一个用于日志记录的流 在构造对象之后应该能够设置 并且可能重置 流 应该可以将流设置为std cout 或者作为记录到文件的文件流 或者作为字符串流 它只是忽略数据 a dev null各种各样的 无论如何 它应该
  • 如何创建更复杂的 Lucene 查询字符串?

    这个问题是从this https stackoverflow com questions 532365 how to get more out of lucene net问题 我的询问有两个方面 但因为两者都是相关的 所以我认为将它们放在一
  • 为什么 python 在 time.sleep() 之后不打印? [复制]

    这个问题在这里已经有答案了 我用 python 编程已经快两年了 当我看一些旧代码时 我发现了一件非常奇怪的事情 import random sys time try while True print str random randint
  • 在 ajax 请求完成之前,react.js 不会渲染

    我有一个非常简单的React js我需要制作一个组件isomorphic 在服务器上呈现 问题是组件仅在之后才呈现有用的信息ajax请求完成 如下所示 export default React createClass getInitialS
  • 将列表转换为 json 格式 - 快速且简单的方法

    假设我有一个如下所示的对象 MyObject public class MyObject int ObjectID get set string ObjectString get set 我有一个 MyObject 列表 我希望使用 str
  • 同一个表之间多对多的级联删除

    我正在尝试在 SQL Server 中的同一个表之间创建多对多关系 我有一张桌子Object有柱子ObjectId and Name 该关系遵循以下规则 一个孩子可以有多个父母 一个父母可以有很多孩子 ObjectA 可以是 Object
  • Bootstrap 模式 - 隐藏一个然后显示另一个

    我已经使用 jQueryUI 很长时间了 但最近出于美观原因切换到 Bootstrap 我现在正在努力解决我认为是一个简单的问题 并想知道其他更熟悉 Bootstrap 的人是否可以帮助我解决这个问题 我有一个用于动态创建对话框的通用函数
  • 恢复PDF中的图形状态后是否可以绘制路径的笔划?

    我在 PDF 中绘制线条 并希望以 1 1 以外的比例缩放 问题是我得到的笔划看起来像是用书法笔绘制的 在PDF中是否可以以某种方式调整路径大小 恢复图形状态 然后绘制上一个路径的笔划 这就是我在 PDF 中获得书法线条的方法 5 w wi
  • 具有 128 位键的基于时间的字典/哈希表,即超时字典中的值

    我需要制作一个基于时间的字典哈希表 其大小不会无限增长 我所说的 基于时间 具体是指 如果我要在 X 时间添加字典 我希望该项目在 X Y 时间不存在 Y 是超时时间 我愿意将时间存储在字典中或作为键或值的结构 CONTEXT 我收到我们正
  • R:获取给定函数内所有变量和函数的列表和环境(用于并行处理)

    我使用 foreach 进行并行处理 这需要通过列表手动将函数传递到寻址核心的环境 我想自动化这个过程并涵盖所有用例 对于仅使用封闭变量的简单函数来说很容易 然而 一旦要并行处理的函数使用在另一个环境中定义的参数和变量 就会出现问题 考虑以
  • 为什么 IE9 需要元标记来渲染圆角?

    在刚刚发布的IE9中 需要提供meta标签允许CSSborder radius渲染 Why 这个链接 http blogs msdn com b ie archive 2010 06 16 ie s compatibility featur
  • Java process.getInputStream() 没有任何内容可读取,子进程死锁

    我在某些进程包装方面遇到问题 并且该问题仅发生在 Windows XP 中 这段代码在 Windows 7 中完美运行 我真的很困惑为什么 XP 中的流是空的 我也尝试过使用 Process Exec 的 String 版本 但没有什么区别