0

私はタイマーが初めてで、それらについてあまり知りません。私の問題は、2つのテーブルを動的に作成していて、テーブルが作成されるたびに10分間のタイマーが割り当てられることです。つまり、ユーザーは 10 分以内にそのテーブルを埋める必要があります。それ以外の場合、テーブルは破棄されます。コードを印刷する小さなデモを作成してみました。コードは次のとおりです。

final Timer mytimers = new Timer(); 
Timer mytimers1 = new Timer();
 mytimers1 = new Timer();
final long delay1 = 5*1000; 
// mytimers = new Timer();
 mytimers.schedule(new TimerTask() {
Long current1 = System.currentTimeMillis();
 long check = current1;

      @Override
      public void run() {
        Long current = System.currentTimeMillis();
        System.out.println(current);
        System.out.println("\n");

       if((current1 + delay1)<current)

       {        

       System.out.println("mytimmer is about to stop");

       mytimers.cancel();


       }


      }

    }, 100, 1000);





 mytimers1.schedule(new TimerTask() {

      @Override
      public void run() {
        Long current = System.currentTimeMillis();
        System.out.println("in" + current);


      }
    }, delay1, 1000);

    }

しかし、このint he finalプロジェクトを実装しようとすると、実行内の変数をfinalにする必要があるため、機能しません。したがって、その値を変更することはできません!!! どうすればいいですか!!ありがとう

4

2 に答える 2

0

このようにしてください:

class YourClass{
Timer mytimers = new Timer(); 
Timer mytimers1 = new Timer();
long delay1 = 5*1000; 

mytimers.schedule(new TimerTask() {
Long current1 = System.currentTimeMillis();
long check = current1;
      @Override
      public void run() {
        Long current = System.currentTimeMillis();
        System.out.println(current);
        System.out.println("\n");
       if((current1 + delay1)<current) {
       System.out.println("mytimmer is about to stop");
       mytimers.cancel();
       }
    }
}, 100, 1000);

mytimers1.schedule(new TimerTask() {

      @Override
      public void run() {
        Long current = System.currentTimeMillis();
        System.out.println("in" + current);
      }
    }, delay1, 1000);
    }

あなたの場合、匿名の「concrete」クラス、つまりTimerTaskを作成し、そのスコープにない変数にアクセスしようとしています。

したがって、アクセスしようとしている変数がローカル(メソッド)変数である場合、それらはfinalとして宣言する必要があります。または、その逆は、これらの変数を上記で行ったことをインスタント(メンバー)変数として宣言することです。

于 2012-07-19T12:48:15.993 に答える
0

run 内の変数を final にする必要があるため、その値を変更することはできません!

これらの変数をメンバー変数に変換するか、これらの値を適切なクラスにカプセル化し、クラスをインスタンス化し、そのオブジェクトへの参照をタイマー タスクに与えます。

参照は最終的なものですが、タイマー タスクはmyTableController.destroyTable().

于 2012-07-03T07:37:07.107 に答える