2011-11-28 3 views
0

Je dois avoir un thread qui vérifie la disponibilité de la connexion réseau sur une application de bureau JAVA. J'ai un fil comme çathreads infinis 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){} 
     } 
    } 
} 

Maintenant quand j'appelle cela dans le constructeur l'application ne se charge jamais. quand je regarde dans la console (je déclenche le pot pour charger à partir de lui) le travail de fil, il imprime "Vérification du réseau" dans la console.

aide appréciée

+4

Votre code d'appel vous sera utile ici. Considérez également un titre différent pour cette question. –

Répondre

9

Je pense que vous faites quelque chose comme:

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

Ceci exécutera la méthode run()synchrone. Vous devez appellerez start() pour créer un thread séparé d'exécution:

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

je recommande également la mise en œuvre Runnable au lieu d'étendre Thread - au lieu ou peut-être tout à fait au moyen d'un Timer, étant donné que vous voulez l'exécution périodique. J'espère que votre code réel se connecte à votre bloc catch, aussi ...

+0

pourquoi implémenter runnable plutôt que d'étendre à partir de thread? – nivanka

+0

@nivanka: Séparation des préoccupations: vous essayez simplement de donner au thread quelque chose à exécuter, sans modifier les autres aspects du comportement du thread. Favoriser la composition sur l'héritage conduit généralement à un code plus propre. –