2012-07-03 36 views
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); 

    } 

但是當我試圖實現這種詮釋,他最終的項目並不如我必須做一個奔跑的最終內的任何變量工作,因此它的價值不能改變! 請告訴我該怎麼辦!謝謝

回答

0

我不得不做出一個奔跑的最終內的任何變量,因此它的價值不能被改變!

要麼把這些變量分爲成員變量或在一個適當的類封裝這些值,實例化的類,並給一個參考給該對象的計時器任務。

儘管參考是最終的,但計時器任務仍可以執行諸如myTableController.destroyTable()之類的操作。

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); 
    } 

你的情況,你已經創建匿名「具體」類即TimerTask的,並且您試圖訪問其不在其範圍內的變量。

所以,如果你要訪問的變量是本地(方法),那麼變量就應該聲明爲final或周圍的其他方法是聲明的變量瞬間(會員)變量是什麼我已經完成了上述。