J'ai une méthode d'interface qui est censée renvoyer un objet Future.Comment utiliser FutureTask <V>, en attente de l'événement?
Future<Result> doSomething()
La mise en œuvre de cette méthode montre un certain ui (javafx). Un des éléments ui a un écouteur, qui doit être appelé pour recevoir le résultat réel dont j'ai besoin.
Comment puis-je y parvenir? Y a-t-il une meilleure solution?
Voici un exemple d'action que je dois attendre:
// this is some framework method I cannot change
@Override
public Data execute(Data data) {
Future<Data> dataFuture = handler.doSomething(data);
// this should basically wait until the user clicked a button
return dataFuture.get();
}
// handler implementation
public Future<Data> doSomething(Data data) {
// the question is how to implement this part, to be able to
// return a future object
Button button = new Button("Wait until click");
// create thread that waits for the button click ?!????
// modify incoming data object when the button was clicked
// somehow create the Future object that's bound to the button click
return future;
}
C'est ce que je veux atteindre:
- ma méthode doSomething montre une nouvelle scène (ui) avec un bouton sur elle
- et retourne immedeately l'objet futur
- de Future.get() attend jusqu'à ce que l'utilisateur a appuyé sur le bouton
limitations: il doit être fait sans bibliothèque supplémentaire et> = java7
Voir aussi http://stackoverflow.com/questions/13796595/return-result-from-javafx-platform-runlater –
Où est-ce que cette méthode est appelée? (Le thread d'application FX ou un thread d'arrière-plan?) Pourquoi avez-vous besoin de faire les choses de cette façon (par exemple, pourquoi ne pas utiliser les mécanismes habituels pilotés par les événements pour "faire quelque chose quand on appuie sur un bouton")? Où le bouton va-t-il être montré? Dans un dialogue? Dans une étape existante? Vous devez probablement fournir * beaucoup * plus de détails, ou de préférence un exemple exécutable complet, pour clarifier ce que vous essayez de faire. –