Tôi có một ứng dụng JavaFX để khởi tạo một số đối tượng Task.JavaFX - đang đợi tác vụ hoàn thành
Hiện tại, triển khai của tôi (xem bên dưới) gọi hành vi runFactory() thực hiện tính toán trong đối tượng Tác vụ. Song song với điều này, nextFunction() được gọi. Có cách nào để có nextFunction() "wait" cho đến khi nhiệm vụ trước đó hoàn tất?
Tôi hiểu thread.join() đợi cho đến khi luồng đang chạy hoàn tất, nhưng với GUI, có thêm các lớp phức tạp do chuỗi gửi sự kiện. Thực tế, việc thêm thread.join() vào cuối đoạn mã dưới đây chỉ chấm dứt tương tác giao diện người dùng.
Nếu có bất cứ đề nghị làm thế nào để làm cho nextFunction chờ đợi cho đến khi chức năng trước đây của nó, runFactory hoàn tất, tôi sẽ rất biết ơn.
Cảm ơn,
// 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();
}
Màn hình, tôi thích logic của bạn ... cảm ơn bạn. Nó có ý nghĩa hoàn hảo. –
Giải pháp này có hiệu quả. Điều đó nói rằng, lợi thế của phương pháp này như thế nào trái ngược với việc làm một cái gì đó như 'Platform.runLater (nextFunction())' là bước cuối cùng trong chuỗi nhà máy? – Vultan
Cảm ơn một triệu, setOnFailed() đã lưu tôi sau hai ngày đấu tranh – Yahya