这是我第一次使用Quartz。我正在尝试一个预先打印“Hello World”的示例程序。但是,当我尝试运行它时,我得到一个错误说
线程“main”中的异常java.lang.RuntimeException:Uncompilable 源代码 - org.quartz.JobDetail是抽象的;无法实例化 在QuartzAppSimpleTrigger.main(QuartzAppSimpleTrigger.java:18)
当我在Netbeans中试用它时,它要求我实现JobDetail的所有抽象方法。 以下是我的代码示例。
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
public class HelloSchedule {
public HelloSchedule() throws Exception {
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
sched.start();
JobDetail jd = new JobDetail("myjob", sched.DEFAULT_GROUP, HelloJob.class);
SimpleTrigger st = new SimpleTrigger("mytrigger", sched.DEFAULT_GROUP, new Date(),
null, SimpleTrigger.REPEAT_INDEFINITELY, 60L * 1000L);
sched.scheduleJob(jd, st);
}
public static void main(String args[]) {
try {
new HelloSchedule();
} catch (Exception e) {
}
}
}
HelloJob.java是
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
public class HelloJob implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException{
System.out.println("Hello World Quartz Scheduler: " + new Date());
}
}
答案 0 :(得分:8)
你使用的是错误的Quartz版本。 Quartz 1.x中的JobDetail
类已经重构为JobDetail
接口,并在Quartz 2.x中实现了org.quartz.impl.JobDetailImpl
您应该在CLASSPATH上用Quartz 1.x替换Quartz 2.x,或者更好地使用新的2.x API。
答案 1 :(得分:0)
JobDetail类是抽象类,所以使用它的实现 有两种方式
第1 using JobDetailsBean
个参考例如http://www.java2s.com/Open-Source/Java-Document/J2EE/spring-framework-3.0.0/org/springframework/scheduling/quartz/JobDetailBean.java.htm
使用MethodInvokingBean
的第二个参考例如http://www.java2s.com/Open-Source/Java-Document/J2EE/spring-framework-3.0.0/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.java.htm