JavaFX - dans l'attente de la tâche à terminer
J'ai un JavaFX application qui instancie plusieurs Tâche objets.
Actuellement, ma mise en œuvre (voir ci-dessous) appelle le comportement runFactory() qui effectue le calcul en vertu d'un objet Tâche. Parallèlement à cela, nextFunction() est invoquée. Est-il un moyen d'avoir nextFunction() "attendre" jusqu'à ce que l'état de la Tâche est terminée?
Je comprends fil.join() attend jusqu'à ce que le thread en cours d'exécution est terminée, mais avec des Interfaces graphiques, il y a de nouveaux niveaux de complexité en raison de l'event dispatch thread.
Comme une question de fait, l'ajout de fil.join() à la fin du code du segment ci-dessous, ne cesse de l'INTERFACE utilisateur de l'interaction.
Si il y a des suggestions à faire nextFunction attendre jusqu'à ce que sa fonction antérieure, runFactory est terminé, je serais très reconnaissante.
Merci,
//High-level class to run the Knuth-Morris-Pratt algorithm.
public class AlignmentFactory {
public void perform() {
KnuthMorrisPrattFactory factory = new KnuthMorrisPrattFactory();
factory.runFactory(); //nextFunction invoked w/out runFactory finishing.
//Code to run once runFactory() is complete.
nextFunction() //also invokes a Task.
...
}
}
//Implementation of Knuth-Morris-Pratt given a list of words and a sub-string.
public class KnuthMorrisPratt {
public void runFactory() throws InterruptedException {
Thread thread = null;
Task<Void> task = new Task<Void>() {
@Override public Void call() throws InterruptedException {
for (InputSequence seq: getSequences) {
KnuthMorrisPratt kmp = new KnuthMorrisPratt(seq, substring);
kmp.align();
}
return null;
}
};
thread = new Thread(task);
thread.setDaemon(true);
thread.start();
}
OriginalL'auteur mtor.signaling | 2013-03-05
Vous devez vous connecter pour publier un commentaire.
Lors de l'utilisation de Tâches, vous devez utiliser
setOnSucceeded
et, éventuellement,setOnFailed
pour créer une logique de flux dans votre programme, je vous propose également de fairerunFactory()
de retour à la tâche plutôt que de l'exécuter:Cette solution semble efficace. Cela dit, quel est l'avantage de cette approche plutôt que de faire quelque chose comme
Platform.runLater(nextFunction())
comme la dernière étape dans l'usine de fil?Un million de mercis, setOnFailed() m'a sauvé après deux jours de lutte
puis-je également utiliser l'Avenir de la méthode get() si j'ai besoin d'attendre pour tâche de façon synchrone (à l'aide de ExecutorServcie) ou est-ce une mauvaise pratique en JavaFX
OriginalL'auteur Dreen