2012-01-19 4 views
2

Existe-t-il un moyen d'implémenter wait(); (méthode non statique) dans un contexte statique. Par exemple:Comment implémenter une méthode non statique dans une classe statique?

public static void getkeylist(List keylist){ 
    for (int i=0;i<keylist.size();i++){ 
     System.out.println(keylist.get(i)); 
     wait(1000); 
    } 
} 

Je reçois une erreur "Méthode non statique wait (long) ne peut pas être référée à partir de contexte statique."

S'il vous plaît aidez-moi à résoudre mon problème. Merci d'avance.

+2

Vous ne pouvez «attendre» que sur quelque chose sur lequel vous êtes «synchronisé». Sur quoi êtes-vous synchronisé? Le [javadoc] (http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait) dit "throws IllegalMonitorStateException - si le thread actuel n'est pas le propriétaire du moniteur de l'objet " –

Répondre

4

Que diriez-vous Thread.sleep(1000);

wait est vraiment utilisé pour le contrôle du fil, ainsi que notify. Je pense que vous êtes confus entre les noms de méthodes.

+0

_Merci beaucoup. J'ai essayé Thread.sleep (1000) cela fonctionne mais il faut lancer InterruptedException. Merci_ – dmfrl

0

Supposons que votre classe est appeler Foo, vous pouvez appeler Foo.class.wait(1000), ou bien vous pouvez définir un objet statique et appeler la méthode d'attente sur elle:

private static final Object lock = new Object(); 
... 

lock.wait(); 
+2

Vous devez tenir le moniteur de l'objet que vous appelez 'wait', donc vous devez avoir' synchronized (lock) {... lock.wait(); } '. Je ne recommanderais pas de verrouiller un objet 'Class' car n'importe qui peut obtenir un verrou dessus sans que vous le sachiez, ce qui risque de provoquer un blocage. –

+0

@CameronSkinner définitivement avec vous sur le bloc de synchronisation et de verrouillage des points de classe. –

0

Créer méthode non statique objet de classe et l'a utilisé.

..... 
Foo foo = new Foo(); 
foo.wait(); 
..... 
+0

Ce faisant, le thread actuel cessera pour toujours car aucun thread n'est capable de se réveiller 'foo' –

Questions connexes