eclipse JAVA runtime_关于java:在eclipse中使用Runtime.getRuntime()。exec

我在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

对于记录,如果您在eclipse之外手动执行exe进程,它是否正常工作?

@TheCapn:执行正在使用和不使用eclipse,但我无法以两种方式传递任何参数

我怀疑问题在于您正在调用的程序。 你有源代码,还是黑盒操作?

我有源代码,但这是我项目的一部分。 无论如何,考虑一个基本程序,它从上面的程序接受参数"XYZ",只打印Your string is XYZ

我的观点是,如果您无法在eclipse之外(即通过终端)正确执行应用程序,则问题必须与您正在调用的程序有关。 我们之间有误会吗?

@TheCapn调用程序是完美的。 如果您查看上面的示例调用程序,如果行'String s = br.readLine();',我能够抓住参数。 写成`String s = args [0];'

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

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

带有Redirect.INHERIT的redirectError()和redirectOutput()方法导致输出只被发送到父Java进程。

甚至你的代码也不起作用。 我在我的问题(要调用的程序)中粘贴了一个非常简单的代码,它应该接受字符串"XYZ"并在我们的程序中显示输出"Your string is XYZ"

java 6版本对我也不起作用。

您将数据作为参数传递,但是从System.in读取它。如果您从参数中读取数据,它将起作用。那么做@prunge所说的捕获子进程打印的内容并将其用作测试,一切都会正常工作。

import java.io.*;

public class Test

{

public static void main(String[] args) throws IOException

{

if(args.length==0)

System.out.println("No String received");

else

System.out.println("Your string is" + args[0]);

}

}

请务必同时检查InputStream和ErrorStream。

但是,如果您想通过System.in传递数据,则必须将呼叫代码更改为:

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

Process pro=Runtime.getRuntime().exec(cmd);

PrintWriter output= new PrintWriter(pro.getOutputStream());

output.println(str);

您正在执行语言编译器javac。我相信你想用你的main方法调用类文件上的java运行时。将javac替换为java,并指定主类。

哦对不起。 那是java那边。 不是javac。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值