1

問題文: タイマーを持つクラスがあります。

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動作しますが、新しいオブジェクトを使用して実行しようとすると失敗します。助けてください。

4

1 に答える 1

4

timerStaticが宣言されstaticています。これは、 のすべてのインスタンスがDeleteTimerの同じインスタンスを共有することを意味しますtimerStatic

メソッドとstaticの両方で修飾子を削除すると、クラスの異なるインスタンスが互いに干渉しなくなります。starttimerStatic

于 2011-08-25T13:02:34.170 に答える