いくつかのタスクオブジェクトをインスタンス化するJavaFXアプリケーションがあります。
現在、私の実装(以下を参照)は、Taskオブジェクトの下で計算を実行する動作runFactory()を呼び出します。これと並行して、nextFunction()が呼び出されます。前のタスクが完了するまでnextFunction()を「待機」させる方法はありますか?
thread.join()は実行中のスレッドが完了するまで待機することを理解していますが、GUIでは、イベントディスパッチスレッドのためにさらに複雑なレイヤーがあります。実際のところ、以下のコードセグメントの最後にthread.join()を追加すると、UIの相互作用が停止するだけです。
nextFunctionを前の関数runFactoryが完了するまで待機させる方法について何か提案があれば、私は非常に感謝しています。
ありがとう、
// 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();
}