我想在每天凌晨2点的时候执行一个Java类的main方法 请问Java里有没有类可以做到,最好能给出代码参考,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SysContextListener.java package axtic.servlet; import java.util.Timer;//定时器类import axtic.bean.exportHistoryBean;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;public class SysContextListener implements ServletContextListener{ private Timer timer = null; public void contextInitialized(ServletContextEvent event) {//在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能 timer = new Timer(true); event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到 timer.schedule(new exportHistoryBean(event.getServletContext()),0,5*1000);//调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时。 event.getServletContext().log("已经添加任务"); } public void contextDestroyed(ServletContextEvent event) {//在这里关闭监听器,所以在这里销毁定时器。 timer.cancel(); event.getServletContext().log("定时器销毁"); }} 接下来可以编写自己的功能类,此类一定要extends定时器类中TimerTaskexportHistoryBean.java package axtic.bean; import java.util.Calendar;import java.util.TimerTask;import javax.servlet.ServletContext;public class exportHistoryBean extends TimerTask{ private static final int C_SCHEDULE_HOUR = 0; private static boolean isRunning = false; private ServletContext context = null; public exportHistoryBean(ServletContext context) { this.context = context; } public void run() { Calendar c = Calendar.getInstance(); if(!isRunning) { if(C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY)) { isRunning = true; context.log("开始执行指定任务"); //-------------------开始保存当日历史记录 //在这里编写自己的功能,例: //File file = new File("temp"); //file.mkdir(); //启动tomcat,可以发现在tomcat根目录下,会自动创建temp文件夹 //-------------------结束 isRunning = false; context.log("指定任务执行结束"); } else { context.log("上一次任务执行还未结束"); } } }} Timer time=new Timer(); TimerTask task = new TimerTask() { public void run() { System.out.println("Hi"); } }; time.schedule(task,1000,2000); Timer time = new Timer(); //设置定时执行程序 TimerTask task = new TimerTask() { public void run() { System.out.println("Hi"); } }; //开始时间从当前时间第二天凌晨两点开始 java.util.Date start=new Date(); start.setDate(start.getDate()+1); start.setHours(2); start.setMinutes(0); start.setSeconds(0); System.out.println(start.toLocaleString()); //时间间隔一天 long period=60*60*24*1000; time.schedule(task, start, period); 线程呵呵一直Thead.sleep();到两点当时间到是interrupt线程 eclipse配置问题? 如何设计出这种效果的JTable? RCP初学者,请高手指路!!! 请教各位大狭 怎样用Java调用linux里的sendmail发邮件 在线等,解决就给分,怎样控制重叠的panel的层叠显示顺序 请问汉字显示问题 简单问题但无人能答? 关于LightningBoard(雷霆论坛)的几点说明。 如何用JAVA实现象OICQ中点击按钮就向上移动的效果? 关于dom4j的编码问题。。 有那位高手知道IBM Aglet在哪里能下载?
package axtic.servlet;
import java.util.Timer;//定时器类
import axtic.bean.exportHistoryBean;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class SysContextListener implements ServletContextListener
{
private Timer timer = null;
public void contextInitialized(ServletContextEvent event)
{//在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
timer = new Timer(true);
event.getServletContext().log("定时器已启动");//添加日志,可在tomcat日志中查看到
timer.schedule(new exportHistoryBean(event.getServletContext()),0,5*1000);//调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时。
event.getServletContext().log("已经添加任务");
}
public void contextDestroyed(ServletContextEvent event)
{//在这里关闭监听器,所以在这里销毁定时器。
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
接下来可以编写自己的功能类,此类一定要extends定时器类中TimerTask
exportHistoryBean.java
package axtic.bean;
import java.util.Calendar;
import java.util.TimerTask;
import javax.servlet.ServletContext;
public class exportHistoryBean extends TimerTask
{
private static final int C_SCHEDULE_HOUR = 0;
private static boolean isRunning = false;
private ServletContext context = null;
public exportHistoryBean(ServletContext context)
{
this.context = context;
}
public void run()
{
Calendar c = Calendar.getInstance();
if(!isRunning)
{
if(C_SCHEDULE_HOUR == c.get(Calendar.HOUR_OF_DAY))
{
isRunning = true;
context.log("开始执行指定任务");
//-------------------开始保存当日历史记录
//在这里编写自己的功能,例:
//File file = new File("temp");
//file.mkdir();
//启动tomcat,可以发现在tomcat根目录下,会自动创建temp文件夹 //-------------------结束
isRunning = false;
context.log("指定任务执行结束");
}
else
{
context.log("上一次任务执行还未结束");
}
}
}
}
TimerTask task = new TimerTask() {
public void run() {
System.out.println("Hi");
}
};
time.schedule(task,1000,2000);
//设置定时执行程序
TimerTask task = new TimerTask() {
public void run() {
System.out.println("Hi");
}
};
//开始时间从当前时间第二天凌晨两点开始
java.util.Date start=new Date();
start.setDate(start.getDate()+1);
start.setHours(2);
start.setMinutes(0);
start.setSeconds(0);
System.out.println(start.toLocaleString());
//时间间隔一天
long period=60*60*24*1000;
time.schedule(task, start, period);
一直Thead.sleep();到两点
当时间到是interrupt线程