Java process.getInputStream () имеет нечего читать, дочерний элемент взаимоблокировки

У меня проблема с упаковкой процесса, и это ' встречается только в Windows XP. Этот код отлично работает в Windows 7. Я действительно озадачен, почему потоки пусты в XP. Я также пробовал использовать String [] версию Process.Exec (), и это не имело никакого значения.

Я использую следующий класс для чтения из процесса '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<String> q = new LinkedList<String>();

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

У кого-нибудь есть идеи? Спасибо!

Правка: Добавлена ​​синхронизация

Правка: Так же, как и обновление, считыватели родительского потока заблокированы при их операции чтения. Если я убью дочерние процессы с помощью диспетчера задач, они прочитают нуль после закрытия потока.

9
задан Banana 21 September 2010 в 05:08
поделиться