Runtime.exec调用外部程序,如何做到不与其产生关联?

cmliu2004 2010-09-10 09:51:46
研究了下Runtime.exec和Process发现,java调用外部程序时,是将其作为子进程进行管理里的,也就是说在执行了调用后,只有外部程序返回了,java才会执行后面的步骤;同时,如果java主程序退出,那么调用的那个程序也会自动退出!
我现在的目的是使用java调用后,不再与调用的那个程序发生关系,如何做到呢?

public static void command() {
//String cmd = "cmd /c start *.exe";
String cmd = "*.exe";
System.out.println("正在执行命令:"+cmd);
try {
Runtime rt = Runtime.getRuntime();
Process p = rt.exec(cmd);
p.destroy();

BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), "gbk"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}

br = new BufferedReader(new InputStreamReader(p.getErrorStream(), "gbk"));
while ((line = br.readLine()) != null) {
System.err.println(line);
}

//int exitVal = p.waitFor();
//System.out.println("执行完毕!返回值="+exitVal);
System.out.println("执行完毕!返回值");

} catch (Exception e) {
e.printStackTrace();
}
}


看网上说可以用cmd /c start命令去执行外部exe程序,我测试了也不行,那位高手给支支招,谢谢了!
...全文
114 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cmliu2004 2010-09-10
  • 打赏
  • 举报
回复
算了,放弃用java了,谢谢你![Quote=引用 5 楼 ticmy 的回复:]
这个真没试过。。。

不过如果不强行退出,在线程执行完之前,main方法是不会自动退出的
[/Quote]
龙四 2010-09-10
  • 打赏
  • 举报
回复
这个真没试过。。。

不过如果不强行退出,在线程执行完之前,main方法是不会自动退出的
[Quote=引用 4 楼 cmliu2004 的回复:]

楼上的ticmy和ChDw:
启用新的线程执行的话,如果java程序关闭了,会不会导致外部调用的程序也一同被关闭了?
[/Quote]
cmliu2004 2010-09-10
  • 打赏
  • 举报
回复
楼上的ticmy和ChDw:
启用新的线程执行的话,如果java程序关闭了,会不会导致外部调用的程序也一同被关闭了?
ChDw 2010-09-10
  • 打赏
  • 举报
回复
子进程进行管理里的,也就是说在执行了调用后,只有外部程序返回了
--
这个是错误的说法,子进程不代表主进程必须等待子进程的,这个没有任何关系。
只是你的代码因为要读取Process的返回流才会导致要等待子进程结束而已


你应该在Java代码中new Thread()中的run方法调用上述代码,那么Java就不存在等待子进程的问题了
龙四 2010-09-10
  • 打赏
  • 举报
回复
java中起一个线程去执行不就行了
cmliu2004 2010-09-10
  • 打赏
  • 举报
回复
如果java做不到,只能想别的办法了!

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧