问题陈述:我的课程中有一个计时器。
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
。请帮忙。
答案 0 :(得分:4)
timerStatic
被声明为static
,这意味着DeleteTimer
的所有实例都共享timerStatic
的同一个实例。
如果您同时移除static
方法和start
上的timerStatic
修饰符,则会阻止您班级的不同实例相互干扰。