私のアプリケーションは、メソッドRunnable
を呼び出して FX スレッドに複数を追加します。その後、FX プラットフォーム キューにPlatform.runlater
追加がない場合にのみ、いくつかの計算を実行したいと考えています。Runnable
しかし、正しい方法がわかりません。適切な時間を取得するためのイベントまたはコールバックメカニズムはありますか?
現在、アプリケーション スレッドを強制的に MILLISECONDS ランダムにスリープさせています。
質問する
1193 次
1 に答える
4
他のコードが何を使用しているかがわからないため、これは最初から悪い考えですPlatform.runLater
。また、そのような実装の詳細に依存するべきではありません。キューが空になることはありません。ただし、 の数を追跡し、すべてが完了したときに通知するカスタム クラスを使用して、
これらの を投稿できます。Runnable
Runnable
public class UpdateHandler {
private final AtomicInteger count;
private final Runnable completionHandler;
public UpdateHandler(Runnable completionHandler, Runnable... initialTasks) {
if (completionHandler == null || Stream.of(initialTasks).anyMatch(Objects::isNull)) {
throw new IllegalArgumentException();
}
count = new AtomicInteger(initialTasks.length);
this.completionHandler = completionHandler;
for (Runnable r : initialTasks) {
startTask(r);
}
}
private void startTask(Runnable runnable) {
Platform.runLater(() -> {
runnable.run();
if (count.decrementAndGet() == 0) {
completionHandler.run();
}
});
}
public void Runnable runLater(Runnable runnable) {
if (runnable == null) {
throw new IllegalArgumentException();
}
count.incrementAndGet();
startTask(runnable);
}
}
于 2016-09-23T09:41:30.577 に答える