gpt4 book ai didi

java - 在 Eclipse 中使用 Runtime.getRuntime().exec

转载 作者:行者123 更新时间:2023-12-04 06:09:19 26 4
gpt4 key购买 nike

我在 eclipse 中使用 Runtime.getRuntime().exec 从当前程序运行另一个 java 程序。
我使用了以下代码。

InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
System.out.println("Enter the class name");
String s=br.readLine();
String str="XYZ";
String[] cmd = {"java","-cp", "C:/Users/..../workspace/Testing/bin",s,str};
Process pro=Runtime.getRuntime().exec(cmd);

我还向该程序传递了一个字符串“XYZ”。该程序只接受字符串并显示

Your string is XYZ



但是通过使用该行

String[] cmd = {"java","-cp", "C:/Users/..../workspace/Testing/bin",s,str};



我能够运行该程序,但它不接受任何参数。它既不显示输出也不显示任何错误。

我哪里出错了?

考虑要调用的程序是
import java.io.*;
public class Test
{
public static void main(String[] args) throws IOException
{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
System.out.println("Enter any string");
String s=br.readLine();
System.out.println("Your string is "+s);
}
}

这个程序应该接受字符串 XYZ 并打印 您的字符串是 XYZ

最佳答案

您需要从 Process 读取输出(和错误)流。使用 getInputStream()getErrorStream() .如果您想等待该过程完成,您将需要一个单独的线程。

String[] cmd = {"java", "-cp", "C:/Users/..../workspace/Testing/bin", s, str};
Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();
final InputStream pOut = p.getInputStream();
Thread outputDrainer = new Thread()
{
public void run()
{
try
{
int c;
do
{
c = pOut.read();
if (c >= 0)
System.out.print((char)c);
}
while (c >= 0);
}
catch (IOException e)
{
e.printStackTrace();
}
}
};
outputDrainer.start();

p.waitFor();

如果您使用的是 Java 7 并希望将进程的所有输出重定向到控制台,则代码要简单得多:
String[] cmd = {"java", "-cp", "C:/Users/..../workspace/Testing/bin", s, str};
Process p = new ProcessBuilder(cmd).redirectError(Redirect.INHERIT)
.redirectOutput(Redirect.INHERIT)
.start();
p.waitFor();
redirectError()redirectOutput()方法与 Redirect.INHERIT导致输出仅发送到父 Java 进程。

关于java - 在 Eclipse 中使用 Runtime.getRuntime().exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7960369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com