java Runtime.getRuntime().exec(command)的奇怪问题,请高手解惑

publicclassTest{publicstaticvoidmain(String[]args){Runtimert=Runtime.getRuntime();Pro... public class Test {
public static void main(String[] args) {
Runtime rt = Runtime.getRuntime();
Process p = null;
try {
System.out.println("删除前:");
p = rt.exec("cmd /c del d:\\112.txt");
System.out.println("删除后:");
} catch (IOException e) {
e.printStackTrace();
}
if (p != null) {
p.destroy();
p = null;
}
}
}
上面的代码是调用系统cmd命令删除D盘112.txt文件
我右键run as java application运行,文件删不掉,但是“删除前:”和“删除后:”都打印出来了
右键debug as java application一步一步运行就可以删除了
这是为什么呢,好奇怪啊
展开
 我来答
wh猎人
2014-06-20 · TA获得超过1125个赞
知道大有可为答主
回答量:1157
采纳率:89%
帮助的人:663万
展开全部
这种第一要看看是不是权限问题,比如win7等操作系统上可能你没有操作这个文件的权限;第二要看文件是不是被别的软件给锁住了,这种也删除不了。
可以打印p.exitValue()来看看
追问
System.out.println("删除后:");
System.out.println(p.exitValue());
这样加了,直接运行报
java.lang.IllegalThreadStateException: process has not exited
但是debug后按F6一步一步执行,打印:
删除前:
删除后:
0
并且把文件删除了
追答
   System.out.println(process.waitFor());// 等待执行完成,并查看结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
btboy1978
2014-06-20 · TA获得超过2015个赞
知道大有可为答主
回答量:2950
采纳率:57%
帮助的人:980万
展开全部
加上这个试试

process.waitFor( );
追问
高手啊,解决了!
我去查了下process.waitFor();
解释是:导致当前线程等待,如有必要,一直要等到由该 Process 对象表示的进程已经终止。
那是不是说rt.exec();还没执行完,该进程就被destroy了;
想到这,我就把下面的
p.destroy();
p = null;
删掉了,然后不加process.waitFor()也对了。
追答
是这个道理,之前我做的一个程序需要获取CMD返回值,发现就是这个原因,线程终止导致返回值取不到
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式