java.lang.IllegalStateException: таймер уже отменен, даже когда я создаю новый экземпляр самого класса - PullRequest
1 голос
/ 24 августа 2011

Постановка задачи: у меня есть класс с таймером.

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 Ответ

4 голосов
/ 25 августа 2011

timerStatic объявлено static, что означает, что все экземпляры DeleteTimer совместно используют один и тот же экземпляр timerStatic.

Если вы удалите модификатор static в обоих startmethod и timerStatic, это остановит различные экземпляры вашего класса, мешающие друг другу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...