Java Runtime.exec是否可以使用stdin编写另一个Java程序?

Java Runtime.exec是否可以使用stdin编写另一个Java程序?,java,runtime,runtime.exec,Java,Runtime,Runtime.exec,我遇到了一个问题,当使用Java运行时运行另一个Java程序时,该程序会冻结,因为另一个程序需要stdin。使用Runtime exec()执行另一个java程序后,处理stdin时出现问题 这是我无法使用的示例代码。这可能吗 import java.util.*; import java.io.*; public class ExecNoGobble { public static void main(String args[]) { if (args.len

我遇到了一个问题,当使用Java运行时运行另一个Java程序时,该程序会冻结,因为另一个程序需要stdin。使用Runtime exec()执行另一个java程序后,处理stdin时出现问题

这是我无法使用的示例代码。这可能吗

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

public class ExecNoGobble
{
    public static void main(String args[])
    {
        if (args.length < 1)
        {
            System.out.println("USAGE: java ExecNoGobble <cmd>");
            System.exit(1);
        }

        try
        {            
            String[] cmd = new String[3];
                cmd[0] = "cmd.exe" ;
                cmd[1] = "/C" ;
                cmd[2] = args[0];
            Runtime rt = Runtime.getRuntime();
            System.out.println("Execing " + cmd[0] + " " + cmd[1] + " " + cmd[2]);
            Process proc = rt.exec(cmd);
            int exitVal = proc.waitFor();
            System.out.println("ExitValue: " + exitVal);        
        } catch (Throwable t)
          {
            t.printStackTrace();
          }
    }
}
最后是启动它的批处理文件:

@echo off

echo.
echo Try to run a program  (click a key to continue)
echo.
pause>nul
java ExecNoGobble "java -cp . ReadInput"
echo.
echo (click a key to end)
pause>nul
我也在这里发布了这个问题:

调用方法
Process.getOutputStream
并将您的输入提供给返回的输出流

:

获取子流程的输出流。流的输出是 通过管道输送到流程的标准输入流,流程由 这个过程对象

实现说明:最好将输出流 缓冲

Returns:
连接到服务器的正常输入的输出流 子流程


如果两者都是java,为什么不在外部java程序中调用main函数呢?只需实例化java程序对象并调用其函数。从另一个程序执行java程序听起来没有意义。我相信我理解您的意思:我需要将JVM参数和类路径传递给我的Exec程序,以支持加载这些包和执行主类?并确保您同时从stdout和stderr读取streams@Jochen:的确,如果他想看到自己的产出,就需要这样做。但我会等着看他是否需要更多帮助,然后再添加任何内容。有些操作系统在进程之间的I/O缓冲空间有限,如果不读取输出流,就会阻塞
public abstract OutputStream getOutputStream()
Returns: