如何在设定的时间运行方法?

时间:2012-11-16 03:18:00

标签: java timer

现在,我正在开发一个项目,我的设置是这样的:我有一个类(Foo),里面有几个方法,必须在不同的时间被主要激活类。

我已经研究了很长一段时间了,我唯一能找到的就是Timer课程,它不太合适,因为它似乎只是一个课程的时间,我不喜欢这个基本程序需要25个不同的类。

如何单独激活Foo中的每种方法?

1 个答案:

答案 0 :(得分:1)

以下类使用TimerTaskMethodTimerTask)的扩展名进行操作,该扩展名包含输入Foo实例和要调用的方法名称。

通过这种方式,使用反射,可以在不同的时间调用不同的方法,只有一个扩展的TimerTask类。

public class MyTimerTaskExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Timer timer = new Timer();
        Foo foo = new Foo();
        timer.schedule(new MethodTimerTask(foo, "method1"), 1000);
        timer.schedule(new MethodTimerTask(foo, "method2"), 3000);
    }

    public static class MethodTimerTask extends TimerTask {

        private String methodName;
        private Foo fooInstance;
        private Exception exception;

        public MethodTimerTask(Foo fooInstance, String methodName) {
            this.methodName = methodName;
            this.fooInstance = fooInstance;
        }

        @Override
        public void run() {
            try {
                Foo.class.getMethod(methodName).invoke(fooInstance);
            } catch (Exception e) {
                this.exception = e;
            }
        }

        public Exception getException() {
            return exception;
        }

        public boolean hasException() {
            return this.exception != null;
        }

    }

    public static class Foo {

        public void method1() {
            System.out.println("method1 executed");
        }

        public void method2() {
            System.out.println("method2 executed");
        }

    }

}

奖励:方法getException()返回执行methodName Foo时捕获的最终异常。