我写了一个定时器,每一小时检查一次,如果到了规定的时间,就去调用(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("运行程序出错!");
                   }              }
            
        }

解决方案 »

  1.   

    你应该再增加一些处理
    p = rn.exec(path); InputStream is = p.getInputStream();
    while(is.read() >= 0);这样可以避免因为外部命令由于输出的缓冲区满了而无法继续运行的问题
      

  2.   

                   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();
    最开始我也写了,但是也卡住了,后来才把这段删了来判断是不是它的问题,我是不是应该用多线程来输出这两个流?
      

  3.   

    问题解决了,除了加上读的操作,还需要加一句p.waitFor();才可以,感谢ChDw对于缓冲区问题的提示