定时调用问题

wangkacha 2010-03-08 01:35:38
我写了一个定时器,每一小时检查一次,如果到了规定的时间,就去调用(exec)外部的Linux下的脚本,现在问题是:调用成功了,但脚本运行到一半的时候就会卡住不运行,后面的“程序运行完成”打出来了,我停止定时器不管用,只有我关闭我写的那个程序才会继续运行,请高手指教一下。以下是代码的片断:
public void run() {
Calendar cal = Calendar.getInstance();
BufferedReader br=null;
String line=null;
System.out.println("现在时间:"+cal.get(Calendar.HOUR_OF_DAY));

if (hour == cal.get(Calendar.HOUR_OF_DAY)) {
Runtime rn = Runtime.getRuntime();
Process p = null;
try {
p = rn.exec(path);
System.out.println("程序运行完成!");
} catch (Exception e) {
System.out.println("运行程序出错!");
}

}

}
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangkacha 2010-03-08
  • 打赏
  • 举报
回复
问题解决了,除了加上读的操作,还需要加一句p.waitFor();才可以,感谢ChDw对于缓冲区问题的提示
wangkacha 2010-03-08
  • 打赏
  • 举报
回复
br = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((line=br.readLine())!=null){
System.out.println(line);
}
br.close();

br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
while ((line = br.readLine()) != null){
System.out.println(line);
}
br.close();
最开始我也写了,但是也卡住了,后来才把这段删了来判断是不是它的问题,我是不是应该用多线程来输出这两个流?
ChDw 2010-03-08
  • 打赏
  • 举报
回复
你应该再增加一些处理
p = rn.exec(path);

InputStream is = p.getInputStream();
while(is.read() >= 0);

这样可以避免因为外部命令由于输出的缓冲区满了而无法继续运行的问题
hchjjun 2010-03-08
  • 打赏
  • 举报
回复

62,619

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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