java中getinputstream_Java process.getInputStream()无需读取,死锁子

我遇到了一些进程包装的问题,它只发生在

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&gt q = new LinkedList&ltString&gt();

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());

}

}

有人有主意吗?谢谢!

编辑:添加同步

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值