2011-11-28 40 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:分离关注点:你只是想让线程运行一些东西,而不是改变线程行为的其他方面。基于继承的构成组合通常会导致更简洁的代码。 –