中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [求助]关于JAVA调用BAT的问题 上一主题 | 下一主题
dhn269
新手上路





积分 8
发帖 3
注册 2008-10-10
状态 离线
『楼 主』:  [求助]关于JAVA调用BAT的问题

1.我在java中调用BAT时,发现java只是调起BAT,并不等待BAT执行完,Process中的waitFor()方法也不管用,往往是进程已经结束了,但Java还认为没结束,或者干脆是Java认为结束了,但进程却实际还在运行着。请问有什么办法解决呢?
2.java能获取BAT退出时返回的errorlevel值吗?
查了一下午了 实在找不到
谢谢

2008-10-14 16:55
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 2 楼』:  

把你用JAVA调用BAT的程序贴出来看看

2008-10-14 17:33
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
dhn269
新手上路





积分 8
发帖 3
注册 2008-10-10
状态 离线
『第 3 楼』:  

用下面这个倒是可以解决调用不等待的问题了,但是“2.java能获取BAT退出时返回的errorlevel值吗?”还是没什么头绪
import java.io.IOException;
import java.io.InputStream;

public class CallCmd {
/**
  * 调用.bat的脚本,等待脚本执行完毕后在执行后面的工作.
  * @param locationCmd bat脚本的位置C:\\2006121911111AP\\2006121911111.bat
  */

public static void  callCmd(String locationCmd){
  try {
   Process child = Runtime.getRuntime().exec("cmd.exe /C start "+locationCmd);
    InputStream in = child.getInputStream();
   int c;
   while ((c = in.read()) != -1) {
   }
   in.close();
   try {
    child.waitFor();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   System.out.println("done");
   
  
  } catch (IOException e) {
   e.printStackTrace();
  }
  
}

}


2008-10-14 18:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
huahua0919
银牌会员




积分 1608
发帖 780
注册 2007-10-7
状态 离线
『第 4 楼』:  

上面的程序中用
while ((c = in.read()) != -1)
来判断程序是否结束,其实也可以创建一个线程,并分配一把锁给这个线程,当程序结束后再归还给main,基本可以实现效果
至于你说的errorlevel返回值,在JAVA中我没听说过,也许是我寡闻,一般的方法返回类型都会在你方法名前定义好的,即使异常的也是通过Try进行捕获!
不知你有何高见

2008-10-14 19:08
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
junchen2
高级用户





积分 537
发帖 219
注册 2007-8-4
来自 杭州--半山
状态 离线
『第 5 楼』:  

start去掉试一试,
PS,代码都没用帖全try catch语句貌似都有错误。本人java知道一点皮毛哈。

2008-10-14 19:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
dhn269
新手上路





积分 8
发帖 3
注册 2008-10-10
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by huahua0919 at 2008-10-14 19:08:
上面的程序中用
while ((c = in.read()) != -1)
来判断程序是否结束,其实也可以创建一个线程,并分配一把锁给这个线程,当程序结束后再归还给main,基本 ...

1.谢谢你的解释,这个程序没什么问题,确实实现那个效果了
2.我说的得到ERRORLEVEL是这个意思:
@echo off
set AAA=234
exit /B %AAA%
这个批处理程序完成以后,会返回234,我用JAVA调用这个批处理后想得到这个234,不知道该怎么写

2008-10-14 22:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: