2011-11-28 91 views
0

我需要一個線程來檢查JAVA桌面應用程序的網絡連接可用性。我得到了這樣的線程無限線程java

class DataSyncThread extends Thread { 
    DataSyncThread() { 
    } 

    public void run() { 
     while(true){ 
      try{ 
       System.out.println("Checking for network"); 
       InetAddress addr = InetAddress.getByName(host); 
       if(addr.isReachable(MIN_PRIORITY)){ 
        syncData(); 
       } 
       this.sleep(1000000); 
      }catch(Exception e){} 
     } 
    } 
} 

現在,當我在constructer中調用這個應用程序永遠不會加載。當我查看控制檯(我觸發jar加載它)的線程時,它會在控制檯中打印「Checking for network」。

幫助表示讚賞

+4

你的調用代碼在這裏會有所幫助。還要爲這個問題考慮一個不同的標題。 –

回答

9

我的猜測是,你正在做的事情,如:

DataSyncThread thread = new DataSyncThread(); 
thread.run(); 

將運行run()方法同步。你應該打電話start()創建一個單獨的執行線程:

DataSyncThread thread = new DataSyncThread(); 
thread.start(); 

我也建議實施Runnable,而不是延長Thread - 或很可能使用Timer代替,因爲你要定期執行。我希望你的真實代碼也能登錄你的catch塊...

+0

爲什麼實現runnable而不是從線程延伸? – nivanka

+0

@nivanka:分離關注點:你只是想讓線程運行一些東西,而不是改變線程行爲的其他方面。基於繼承的構成組合通常會導致更簡潔的代碼。 –