2010-12-03 4 views
0

J'ai eu du mal ce problème java pour quelques heures que je pensais d'abord était assez facile .. -.-appels multiples, une minuterie

Le problème est que j'ai un champ de texte .. Chaque fois que l'utilisateur écrit un caractère dans le champ, une méthode est invoquée. La chose est que je veux mettre en œuvre une minuterie. L'heure est réglée à par exemple 5 secondes. Chaque fois que l'utilisateur écrit, la minuterie se réinitialise. Cela signifie .. La méthode ne sera invoquée que si l'utilisateur n'a rien écrit pendant 5 secondes ..

J'ai essayé d'utiliser le fil, la minuterie, le timertask etc. Comme je google il vous ne pouvez pas vraiment modifier un timertask, vous avez pour en commencer un nouveau à chaque fois.

Pouvez-vous m'aider?

Répondre

0

Oui, vous devez annuler et créer un nouveau Timer/TimerTask à chaque fois, il n'y a aucun moyen de mettre en pause ou de le réinitialiser, une fois qu'il est en cours d'exécution. En fonction de vos besoins en termes de timing, vous pouvez contourner ce problème en exécutant une minuterie qui se déclenche une fois par seconde et en regardant l'heure à laquelle le dernier caractère a été entré pour décider si vous devez réellement faire quelque chose. Cela réduira considérablement le temps de traitement, car vous ne démarrerez pas un nouveau Thread et ne terminerez pas le précédent (c'est ce que fait le Timer) pour chaque pression de touche.

En outre, s'il vous plaît jeter un oeil à cette question pour une meilleure alternative, si vous avez au moins Java 5 à votre disposition:

Resettable Java Timer

0

Utilisez un DocumentListener pour écouter le texte étant ajouté/retiré le JTextField.

Ensuite, vous pouvez utiliser une minuterie d'oscillation. Il a une méthode restart().

Questions connexes