Ich habe eine Interface-Methode, die ein Future-Objekt zurückgeben soll.Wie benutzt man FutureTask <V>, auf ein Event wartend?
Future<Result> doSomething()
Die Implementierung dieser Methode zeigt einige ui (javafx). Eines der UI-Elemente hat einen Listener, der aufgerufen werden muss, um das eigentliche Ergebnis zu erhalten, das ich brauche.
Wie erreiche ich das? Gibt es eine bessere Lösung?
Hier ist ein Beispiel Aktion Ich muss warten:
// 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;
}
Dies ist, was ich erreichen will:
- meine Methode doSomething eine neue Szene zeigt (ui) mit einem Knopf auf sie
- und kehrt immedeately die Zukunft Objekt
- future.get() wartet, bis der Benutzer auf die Schaltfläche gedrückt
Einschränkungen: es ohne zusätzliche Bibliothek getan werden muss und auf> = Java7
Siehe auch http://stackoverflow.com/questions/13796595/return-result-from-javafx-platform-runlater –
erreichen wollen Wo Wird diese Methode aufgerufen? (Der FX-Anwendungsthread oder ein Hintergrundthread?) Warum müssen Sie die Dinge so machen (d. H. Warum verwenden Sie nicht einfach die üblichen ereignisgesteuerten Mechanismen für "etwas tun, wenn eine Taste gedrückt wird")? Wo wird der Button angezeigt? In einem Dialog? In einer bestehenden Phase? Sie müssen wahrscheinlich * viele * weitere Details angeben oder vorzugsweise ein komplettes ausführbares Beispiel, um zu verdeutlichen, was Sie zu tun versuchen. –