java.lang.IllegalStateException:即使我正在创建类本身的新实例,Timer也已被取消

时间:2011-08-24 13:19:22

标签: java timer illegalstateexception

问题陈述:我的课程中有一个计时器。

class DeleteTimer {

    private Timer timer = new Timer();

    private static Timer timerStatic;

    public DeleteTimer(Member uid, String serverFilePath, String deleteTime) {

    }

    public static void start() {
        timerStatic.schedule(new TimerTask() {
            public void run() {
                deleteFolder();
                try {
                    timerStatic.cancel();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            private void deleteFolder() {
                //delete a folder
               return true;
            }
        }, 10000);
    }

}

我有一个程序可以创建一些文件夹,我想要在一段时间后自动删除这些文件夹。文件夹的名称不固定,因此每次调用此类时,我都会为它创建一个新对象。

DeleteTimer obj = new DeleteTimer();
obj.start();

这在第一次尝试时效果很好,但在我尝试使用新对象运行时会给出java.lang.IllegalStateException: Timer already cancelled。请帮忙。

1 个答案:

答案 0 :(得分:4)

timerStatic被声明为static,这意味着DeleteTimer的所有实例都共享timerStatic的同一个实例。

如果您同时移除static方法和start上的timerStatic修饰符,则会阻止您班级的不同实例相互干扰。