公司需要,要求把4个文件夹的DOC文件每天备份一次。每个文件夹下约有 10万个DOC文件,并且每天都在更新。为了不影响白天的工作,我选择通过定时程序在晚上12点开始运行!public class CoypTimerTask extends TimerTask {
 
    public void run() {
     CheckDir cd = new CheckDir("H:/DOC_FILES");
String dir = cd.dir();
Date starttime = new Date();
try {
new CopyDir().CopyDir("Y:/DOC_File/200804", "H:/DOC_FILES/"+dir+"/200804");
new CopyDir().CopyDir("Y:/DOC_File/200805", "H:/DOC_FILES/"+dir+"/200805");
new CopyDir().CopyDir("Y:/DOC_File/200806", "H:/DOC_FILES/"+dir+"/200806");
new CopyDir().CopyDir("Y:/DOC_File/200807", "H:/DOC_FILES/"+dir+"/200807");
new CopySystemLog("H:/DOC_FILES/"+dir+"/CopyLog.txt",starttime.toString());

} catch (IOException e) {
e.printStackTrace();
}
new CopySuccess();
       }
 
 }
***************************************************************************
public class CopyFileSystem_auto {
 
     public static void main(String[] args) {
            Timer timer = new Timer();
            Date date= new Date(108,6,19,23,50,0);
            timer.schedule(new CoypTimerTask(),date);
 
     }
 
}
开始两天运行还不错,可是这两天发现一些问题,程序经常在到了运行时间的时候出错。启动程序跟主程序运行相差5个多小时左右。错误类型Exception in thread Timer-0 java.lang.NullPointerException,看起来像是定时程序的问题。请各位高手百忙中抽空帮我看看,万分的感谢,如需看全部代码,请通知我。问题解决必将加分感谢!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【dawnspace】截止到2008-07-31 09:57:48的历史汇总数据(不包括此帖):
    发帖的总数量:7                        发帖的总分数:200                      每贴平均分数:28                       
    回帖的总数量:8                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:7                        结贴的总分数:200                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:14.29 %               无满意结分率:10.00 %                  
    敬礼!

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=dawnspace
      

  2.   

    scheduleAtFixedRate?固定速率执行?哎呀,对呀,这种长时间后台运行不能用固定延迟执行啊!谢谢提点,如果问题解决,我将追分!
      

  3.   

    向你这种每天定时只运行一次的人物,其实是很好实现的。当然,我指的是用线程来实现。我大致写一下代码,你看一下思路。public TaskWatchDog extends Thread{
      private Calendar lastRunning=null;
      private Calendar now = null;
      private CoypTimerTask task = new CoypTimerTask();
      private boolean running=true;
      public TaskWatchDog(){
        now = lastRunning = Calendar.getInstance();
      }
      public void run(){
        while(running){
          int lastDay = lastRunning.get(Calendar.DAY_OF_MONTH);
          int nowDay = now.get(Calendar.DAY_OF_MONTH);
          if(nowDay!=lastDay){
             task.run();
             lastRunning=Calendar.getInstance();
          }
        }//while
      }
    }
    /**************************************************************/
    public class CopyFileSystem_auto {
     
         public static void main(String[] args) {
                new TaskWatchDog().start();  
         }
     
    }
      

  4.   

    哦,忘了sleep了。是任务不是人物。public TaskWatchDog extends Thread{
      private Calendar lastRunning=null;
      private Calendar now = null;
      private CoypTimerTask task = new CoypTimerTask();
      private boolean running=true;
      public TaskWatchDog(){
        now = lastRunning = Calendar.getInstance();
      }
      public void run(){
        while(running){
          int lastDay = lastRunning.get(Calendar.DAY_OF_MONTH);
          int nowDay = now.get(Calendar.DAY_OF_MONTH);
          if(nowDay!=lastDay){
             task.run();
             lastRunning=Calendar.getInstance();
          }
          Thread.sleep(10000);
        }//while
      }
    }
    /**************************************************************/
    public class CopyFileSystem_auto {
     
         public static void main(String[] args) {
                new TaskWatchDog().start();  
         }
     
    }
      

  5.   

    其实如果在windows的话,就直接用它的task就可以实现定时任务了,写个bat文件,然后定个task每天run这个bat就可以了.