Comment puis-je faire Java attendre une méthode avant de continuer?
Donc mon problème est que j'ai besoin de ces méthodes pour exécuter l'un après l'autre, mais je ne peux pas travailler sur la façon de rendre les méthodes d'attendre avant de l'exécuter.
Toute aide est appréciée. Je vous remercie.
Voici mon code:
public void startMoving() throws InterruptedException
{
moveEnemy("right",3);
wait();
moveEnemy("down",3);
wait();
moveEnemy("right",2);
wait();
moveEnemy("up",1);
wait();
moveEnemy("right",2);
wait();
moveEnemy("up",2);
wait();
moveEnemy("right",2);
wait();
moveEnemy("down",4);
wait();
moveEnemy("left",1);
wait();
moveEnemy("down",2);
wait();
moveEnemy("right",3);
wait();
moveEnemy("up",2);
wait();
moveEnemy("right",1);
wait();
moveEnemy("up",1);
wait();
moveEnemy("right",3);
}
public void moveEnemy(final String direction, final int numMoves)
{
Thread moveThread = new Thread(new Runnable()
{
public void run()
{
isMoving = true;
int originalX = getX();
int originalY = getY();
for(int loop = 0; loop <= 98*numMoves; loop++)
{
try
{
Thread.sleep(5);
}
catch (InterruptedException e){}
if(direction.equals("up"))
{
setLocation(originalX,originalY+loop);
}
if(direction.equals("down"))
{
setLocation(originalX,originalY-loop);
}
if(direction.equals("left"))
{
setLocation(originalX-loop,originalY);
}
if(direction.equals("right"))
{
setLocation(originalX+loop,originalY);
}
}
try
{
Thread.sleep(50);
}
catch (InterruptedException e){}
notify();
}
});
moveThread.start();
thread.wait()
?- Probablement Fil.sleep(), je suppose qu'il veut attendre une certaine période de temps
- Ne pas dormir ou attendre sur le thread de l'INTERFACE utilisateur...
- Ne pas utiliser des Threads alors.
- Il est probablement mieux d'avoir votre threads séparés vérifier les conditions ont été remplies avant de procéder. Fondamentalement, vérifier auprès de votre contrôleur et de voir si elles doivent continuer ou d'une boucle jusqu'à ce que donné le OK. Je voudrais éviter de
Thread.sleep()
, mais dans tous les test/jetez code.Thread.sleep()
a toutes sortes de problèmes, y compris de ne pas être précis. Si vous avez besoin de précision de tir de méthodes, il peut être intéressant de vérifier dansScheduledExecutorService
et/ou laQuartz
de la bibliothèque. - Pourquoi êtes-vous à l'aide de
Thread
s à tous? Voulez-vous garder les opérations de l'EDT, mais dans un ordre séquentiel? Ensuite, vous avez besoin d'unThread
, pas un par opération comme vous le faites maintenant. - Salut! Avez-vous résolu ce problème? Je suppose que je suis confronté à la même. Vous avez Minuterie? Je suppose que vous êtes à l'aide de la JFrame avec le Composite et de repeindre tout lorsque la Minuterie est en cours d'exécution. Suis-je le droit?
Vous devez vous connecter pour publier un commentaire.
La solution la plus simple pourrait être de ne pas utiliser les threads, mais je doute que ce soit ce que vous voulez.
Ce que vous pourriez être à la recherche pour le concept de serrures:
Une méthode peut acquérir le verrou associé à un objet en appelant le:
Cette acquiert le verrou de l'Objet donné, exécute le code et libère le verrou par la suite. Si le verrou est déjà acquis par une autre méthode/fil, le code s'arrête jusqu'à ce que le verrou est libéré par l'autre méthode de/thread.
Vous pouvez également ajouter synchronisée de déclaration pour les méthodes d'une classe pour leur faire acquérir le verrou de l'objet parent.
Plus d'Informations sur ce qui est donné à:
http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html
Vous pouvez utiliser
Thread.sleep(timeInMiliseconds)
pour mettre en pause le thread en cours d'exécution. Si c'est le même fil que vous utilisez pour mettre à jour votre INTERFACE de l'INTERFACE utilisateur sera gelé pendant le sommeil, il est préférable de garder tous les éléments d'INTERFACE utilisateur dans son propre thread.Thread.sleep()
plus. Il est vieux et a été posé au-dessus avec beaucoup plus d'enfilage des couches d'abstraction commejava.util.concurrent.*
. Threads doit "check in" avec le contrôleur pour déterminer le débit.