我正在使用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;
}