package 进程间的通信;
import java.io.*;public class MainProcess implements Runnable{
    Process p=null;
    /** Creates a new instance of MainProcess */
    public MainProcess()
    {
       //new Thread(this).start();
      try
      {
        p=Runtime.getRuntime().exec("java ChildProcess");
      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
      new Thread(this).start(); 
    } 
    public void run()
    {
      
       InputStream ism=p.getInputStream();
       BufferedReader br=new BufferedReader(new InputStreamReader(ism));
       try
        {
            while(true)
            {
               String str=br.readLine();
               System.out.println(str+":");
            }
           
          // br.close();
        }
       catch(Exception e)
        {
           e.printStackTrace();
        }
    }
    public static void main(String args[])
    {
       MainProcess mp=new MainProcess();
    }
}
//下面是子进程代码 
package 进程间的通信;import java.io.*;
public class ChildProcess {
    
    /** Creates a new instance of ProcessTest */
    public static void main (String args[])
    {
        while(true)
        {
           System.out.print("communication\n");
        }
    }
    
}//为什么读取到的内容为null,而不是communication

解决方案 »

  1.   

    这个问题是父进程执行java ChildProcess时找不到ChildProcess.class引起的
      

  2.   

    String line=null;
    while((line = br.readLine()) != null)
                    System.out.println(line);读数据用上面的方法读另外 p=Runtime.getRuntime().exec("java ChildProcess"); 路径有错
    你用p=Runtime.getRuntime().exec("nslookup -q=mx google.com");  能看到有输出值~~~
      

  3.   

    非常感谢各位,你们的答案都非常的好,但我可以可以肯定你们还没有深入的研究.近两天的思考,我发现了 NetBeans的一个缺点
      

  4.   

    首先 我在NetBeans中运行该文件,打印出无数多个null,陷入循环之中.
      

  5.   

    其次 我若在命令行窗口中游行上面的代码,他会抛出如下的异常:
    Exception in thread "main" java.lang.NoClassDefFoundError: MainProcess (wrong na
    me: ProcessCommunication/MainProcess)
            at java.lang.ClassLoader.defineClass1(Native Method)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$000(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)