研究了下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程序,我测试了也不行,那位高手给支支招,谢谢了!
我现在的目的是使用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程序,我测试了也不行,那位高手给支支招,谢谢了!
解决方案 »
- org.apache.jasper.JasperException: Template /template/ajax/text.ftl not found
- 如何将java程序封装,实现将word文档转换成pdf文档?
- 为什么要使用freemarker
- 乱码
- oracle数据转移问题
- struts Action中 返回findForward跳转的问题
- 关于struts 的多模块配置问题
- Remote Desktop 管理不了我的远程服务器了!!急,急,急!
- 有关javamail的问题,忘各位大侠指点~
- 《J2EE技术内幕》怎么样啊?花50元买的
- mysql中使用了between之后如何在进行条件限制
- windows2003 Apach2.2+Tomcat6.0 LoadBlance 问题
--
这个是错误的说法,子进程不代表主进程必须等待子进程的,这个没有任何关系。
只是你的代码因为要读取Process的返回流才会导致要等待子进程结束而已
你应该在Java代码中new Thread()中的run方法调用上述代码,那么Java就不存在等待子进程的问题了
启用新的线程执行的话,如果java程序关闭了,会不会导致外部调用的程序也一同被关闭了?