Salut,

Je rencontre un problème auquel je ne trouve pas de solution propre.
Je souhaite exécuter une action toutes les x secondes. Cette action consiste à tester une condition, et si elle est fausse (ou vraie, ça dépend si on prend la négation), alors il faut arrêter d'exécuter l'action toutes les x secondes.

Voici l'exemple, mais qui évidemment ne marche pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
final ScheduledFuture<?> future = executor.submit(new Runnable() {
	@Override
	public void run() {
		boolean condition = false; //remplacer par la condition
		if (condition) {
			future.cancel(false);
		} else {
			//code
		}
	}
}, 10, 10, TimeUnit.SECONDS);
Forcément, on ne peut pas faire future.cancel(), car il peut ne pas être initialisé.

Le problème, c'est que pour s'annuler, l'action doit connaître le future qui est renvoyé lorsqu'on met le runnable en paramètre de submit (en gros il y a un cycle de causalité).

Avez-vous une solution?