为什么我的java TimerTask在Netbeans中停止执行?

时间:2013-11-05 22:31:55

标签: java netbeans

我正在使用schedule方法在TimerTask中运行java应用程序,即它以一定的时间间隔运行,如果timertask延迟,它不会尝试追赶。我希望程序尽可能长时间运行,如果不是无限期的话。我正在使用Netbeans 7.3。

但是,我发现在几个小时后(有时只有1小时,有时超过24小时),程序停止打印到控制台,实际上完全停止运行。我知道不仅仅是它停止打印到控制台,因为该程序还会定期发送电子邮件,并且在停止后电子邮件也会停止发送。它并不总是说“构建完成”或抛出异常,但有时它会简单地说“构建完成”并停止运行。

我试过环顾网络,但我似乎找不到任何确凿的答案。我看到某个地方TimerTask会停止运行,如果它抛出一个未检查的excpetion,但因为它并不总是停在TimerTask的末尾,而是在任务中间的某个随机点停止,我不认为这是什么的发生。

有谁知道出了什么问题以及如何解决这个问题?

任何指针都会非常感激。

谢谢, 保罗

编辑:在我尝试将记录器放入我的timertask之后,代码出错并出现以下异常: java.io.IOException:无法获取Logging.txt的锁定。这可能是一个单独的问题,因为我从未使用过记录器。我在某处读到这个异常可能意味着我缺少一些写入java文件的权限(不确定是否是这种情况或如何修复Netbeans)。如果我修复记录器并且它不相关,我将删除此编辑

编辑:我忘了提到广播功能涉及与各种服务器的大量通信。我认为问题可能是程序只是卡在一条线上而永远不会完成。在这种情况下,我需要找出一种方法让广播方法在一定时间后超时,然后再试一次。

编辑:这是我的代码示例:

    public void RUN(){
                exchanges.add(Bitstamp);
                exchanges.add(BTCE);
                exchanges.add(CampBX);
    t.schedule(
    new TimerTask()
         {
        public void run()
         {
     Broadcast(exchanges);


    UseLogger.Log();
         }
}, 0,15000);

}

public static void Broadcast(ArrayList<Exchange> exchanges){
 for (int i=0; i<exchanges.size();i++){
       exchanges.get(i).prepareGetUpdate();
   }
        System.out.println("************** TICKERS *****************");
        try{
    for (int i=0; i<exchanges.size();i++){
        System.out.println(exchanges.get(i).getPrices());
    }
        tickerException=false;
        } catch (Exception e){
        tickerException=true;
    }

    System.out.println("");
    System.out.println("************** BALANCES *****************");
    try{
    for (int i=0;i<exchanges.size();i++){
        System.out.println("i: " + i);
        System.out.println(exchanges.get(i).getBalance());

    }
    balanceException=false;
    } catch (Exception e){
        balanceException=true;
    }
      System.out.println("************ ORDERS *****************");
    try{
    for (int i=0; i< exchanges.size();i++){
       exchanges.get(i).getOrders(); 
       if (exchanges.get(i).exchangeName.contentEquals("BTCE")){
           exchanges.get(i).Total_btc+=exchanges.get(i).btcInOrders;
           exchanges.get(i).Total_usd+=exchanges.get(i).usdInOrders;
       }
    }
    orderException=false;
    } catch (Exception e){
        orderException = true;
    }

    for (int i=0; i< exchanges.size();i++){
       exchanges.get(i).getUpdate(); 
    } 



    btcDiff = totalBTC-originalTotal;
    btcNeutral=true;
}

0 个答案:

没有答案