Process p1 = Runtime.getRuntime().exec( new String[]{ "ping", "www.yahoo.com" }); InputStream is = p1.getInputStream(); int r; while( (r=is.read()) != -1) System.out.print((char)r);Pinging www.yahoo.akadns.net [64.58.76.228] with 32 bytes of data:Reply from 64.58.76.228: bytes=32 time=141ms TTL=241 Reply from 64.58.76.228: bytes=32 time=130ms TTL=241 Reply from 64.58.76.228: bytes=32 time=130ms TTL=241 Reply from 64.58.76.228: bytes=32 time=140ms TTL=241Ping statistics for 64.58.76.228: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 130ms, Maximum = 141ms, Average = 135ms
谢谢helpall的回复 我的程序里面只要把命令改为ping和相应的参数也可以输出你所说的结果, 但是原样换成我的命令就不行了 我把原程序贴出来吧 String util = new String("...\\openssl.exe"); String[] parameter = {"req","-new","-config", "...\\openssl.cnf","-days","365", "-out","...\\test_csr.pem","-keyout", "...\\test_pk.pem"}; ... try{ Process p = Runtime.getRuntime().exec(util,parameter); BufferedReader br=new BufferedReader(new InputStreamReader (p.getInputStream())); /******* 程序单步跟踪的时候一到下面这句就停下来了 *******/ System.out.println("br.readLine 结果是 "+ br.readLine()); ........ 所谓停下来就是debug窗口的step按钮全部失效,显示正在调试,在输出窗口也没有什么变化。 此时若强行停止程序,就会出现这样的输出 br.readLine 结果是 openssl> ..... result is /** 这里的输出就都是空的了 ***/
谢谢advanced和zlyperson的回复! 呵呵,advanced,exec(String[] cmdarray)的方法我试过,和上面的结果一样, 到 br.readline就停下来了,两者不同的地方在于强行停止后,输出都是空的 即: br.readLine 结果是 null ......... the result is
import java.io.*; import java.net.*;public class t{ public static void main(String args[])throws Exception{ InputStreamReader ir; BufferedReader in; Process p1 = Runtime.getRuntime().exec( new String[]{ "ping", "www.yahoo.com" }); InputStream ou=p1.getInputStream(); ir=new InputStreamReader(ou); in=new BufferedReader(ir); String r; while( (r=in.readLine())!=null){ System.out.println(r); } } }出来哪个我想调试别人的程序
我试了一下,不行啊,现在程序的输出都捕捉不到
比如说运行ping的时候,使用下面的语句
br=new BufferedReader(new InputStreamReader(p.getInputStream()));
就可以通过br捕捉到ping的输出,
但是运行我的可执行程序util时,一到这里就停下了,不动了,没有输出,也没有报错,
不知道是怎么回事
new String[]{
"ping",
"www.yahoo.com"
});
InputStream is = p1.getInputStream();
int r;
while( (r=is.read()) != -1)
System.out.print((char)r);Pinging www.yahoo.akadns.net [64.58.76.228] with 32 bytes of data:Reply from 64.58.76.228: bytes=32 time=141ms TTL=241
Reply from 64.58.76.228: bytes=32 time=130ms TTL=241
Reply from 64.58.76.228: bytes=32 time=130ms TTL=241
Reply from 64.58.76.228: bytes=32 time=140ms TTL=241Ping statistics for 64.58.76.228:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 130ms, Maximum = 141ms, Average = 135ms
谢谢helpall的回复
我的程序里面只要把命令改为ping和相应的参数也可以输出你所说的结果,
但是原样换成我的命令就不行了
我把原程序贴出来吧
String util = new String("...\\openssl.exe");
String[] parameter = {"req","-new","-config",
"...\\openssl.cnf","-days","365",
"-out","...\\test_csr.pem","-keyout",
"...\\test_pk.pem"};
...
try{
Process p = Runtime.getRuntime().exec(util,parameter); BufferedReader br=new BufferedReader(new InputStreamReader (p.getInputStream())); /******* 程序单步跟踪的时候一到下面这句就停下来了 *******/
System.out.println("br.readLine 结果是 "+ br.readLine());
........
所谓停下来就是debug窗口的step按钮全部失效,显示正在调试,在输出窗口也没有什么变化。
此时若强行停止程序,就会出现这样的输出
br.readLine 结果是 openssl>
.....
result is /** 这里的输出就都是空的了 ***/
exec(String cmd, String[] envp)
后面的参数是环境变量,不是参数,所以必须用
exec(String[] cmdarray)
把参数和命令放到一个String[]里面,搂主,没错了。
呵呵,advanced,exec(String[] cmdarray)的方法我试过,和上面的结果一样,
到 br.readline就停下来了,两者不同的地方在于强行停止后,输出都是空的
即:
br.readLine 结果是 null
.........
the result is
import java.net.*;public class t{
public static void main(String args[])throws Exception{
InputStreamReader ir;
BufferedReader in;
Process p1 = Runtime.getRuntime().exec(
new String[]{
"ping",
"www.yahoo.com"
});
InputStream ou=p1.getInputStream();
ir=new InputStreamReader(ou);
in=new BufferedReader(ir);
String r;
while( (r=in.readLine())!=null){
System.out.println(r);
}
}
}出来哪个我想调试别人的程序
我的程序没有完全贴完,但整体实现和你所贴的类似,运行后同样会在
下面这句停下来
while( (r=in.readLine())!=null){
System.out.println(r);
.............
似乎InputStream并不能获取命令的执行结果
OutputStream 的方法我试过,程序没有反应,不知道是不是输入格式有问题
源程序是这样的 String util = new String("...\\openssl.exe");
String[] parameter = {util,"req","-new","-config",
"...\\openssl.cnf","-days","365",
"-out","...\\test_csr.pem","-keyout",
"...\\test_pk.pem"};
StringBuffer sb=new StringBuffer();
String inline;
String retu;
...
try{
Process p = Runtime.getRuntime().exec(parameter); if(p == null)
{
System.out.println("现在process仍旧为null");
}
BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
// OutputStream oStream = p.getOutputStream();
if(br == null)
System.out.println("br is null"); while((inline=br.readLine())!=null)
{
sb.append(inline).append("\n");
System.out.println("************* 中间inline 的 结果是"+sb.toString());
} retu=sb.toString(); //将命令结果返回
System.out.println("结果是"+retu);
sb = null;
int m_int = p.exitValue();
System.out.println("process现在的状态是 : " + m_int);