Java Runtime.exec是否可以使用stdin编写另一个Java程序?
我遇到了一个问题,当使用Java运行时运行另一个Java程序时,该程序会冻结,因为另一个程序需要stdin。使用Runtime exec()执行另一个java程序后,处理stdin时出现问题 这是我无法使用的示例代码。这可能吗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
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: