线程正常终了时 p1.waitFor() == 0

 /**
* 判断路径是否含有空格(含有空格Dos start命令无法识别)
*/
private static String setFilePath(String path) {
int index = path.indexOf(" ");
if (index != -1) {
path = path.replaceAll(" ", "\"" + " " + "\"");
}
System.out.println("Dos Star 路径问题:" + path);
return path;
}

/**
* 导入SQL文件
* @param path 文件保存路径
* @param textid 单位ID
*/
private void export(String path) {
try {
// 调用外部批处理文件 对SQL文件中的 INSERT 改写为 REPLACE
callbat(path);
//执行DOS命令
String temp1 = "cmd /c mysql -u root --password=sa bc <";
Process p1 = Runtime.getRuntime().exec(temp1 + setFilePath(path));
if(p1.waitFor() == 0){

//导入数据成功
import_message("1");
//导入之后进行合计计算
TotalUp.executeSum();
//合计失败
if (!TotalUp.executeSum()) {
System.out.println("导入后合计失败");
}
}
} catch (IOException e) {
//导入数据失败
import_message("0");
System.err.print(e);
}
}





因为当你在一个Process上调用waitFor方法时,当前线程是阻塞的,如果外部命令无法执行结束,那么你的线程就会一直阻塞下去,这种意外会影响我们程序的执行。所以在我们不能判断外部命令什么时候执行完毕而我们的程序还需要继续执行的情况下,我们就应该循环的使用exitValue来取得外部命令的返回状态,并在外部命令返回时作出相应的处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值