2011-10-04 54 views
0

這是代碼:後的代碼執行計時器不工作

public class Controller { 
    NetworkDiscovery n; 
    public static int discoveryInterval=2000; 

    public static void main(String[] args) throws UnknownHostException{ 
     Timer t1=new Timer(); 
     t1.scheduleAtFixedRate(new NetworkDiscovery(), 2000, discoveryInterval); 
     System.out.println("null"); 
    } 
} 

假設有一類NetworkDiscovery它有一個run(),並在一切工作正常,將調用println()本身並沒有得到執行。爲什麼這樣?

在執行其他操作時是否還有另一種方法在後臺重複執行某個操作?

+0

無法重現你的錯誤。你確定'println()本身沒有得到執行'嗎? –

回答

1

您發佈的代碼創建定時器, System.out.println("null");在實例化之後立即運行,而不是定時器類的一部分。

所以,你的輸出,-是,應該是:

null          <- only happens once 
[output from NetworkDiscovery() method] 
[output from NetworkDiscovery() method] 
[output from NetworkDiscovery() method] <- repeated every 2 seconds 
4

當我用下面的虛擬實現,試了一下,似乎標榜的工作:

import java.net.UnknownHostException; 
import java.util.Timer; 
import java.util.TimerTask; 

public class Controller { 

    private static final class NetworkDiscovery extends TimerTask { 
     @Override 
     public void run() { 
      System.out.println("NetworkDiscovery"); 
     } 
    } 

    NetworkDiscovery n; 
    public static int discoveryInterval = 2000; 

    public static void main(String[] args) throws UnknownHostException { 
     Timer t1 = new Timer(); 
     t1.scheduleAtFixedRate(new NetworkDiscovery(), 2000, discoveryInterval); 
     System.out.println("null"); 
    } 
} 

我得到以下輸出:

null 
NetworkDiscovery 
NetworkDiscovery 
...(every 2000 milliseconds)...