Я смотрю на свой код, и я довольно застрял в одной проблеме: Я хочу сделать переход с постепенным исчезновением, и я хочу заблокировать текущий поток, в то время как выполняется переход затухания. Итак, моя попытка состояла в том, чтобы создать CountDownLatch, который блокирует поток, пока не вызывается change.setOnFinished(), где я делаю latch.countdown(). Короче говоря, я хочу убедиться, что переход всегда отображается во всю длину.JavaFX FadeTransition.onSetOnFinished с CountdownLatch не работает должным образом
Казалось, что мне достаточно прямо, но ... SetOnFinished() не вызывается, ПОТОМУ ЧТО указанная выше текущая нить блокируется защелкой обратного отсчета.
Как я могу решить эту проблему? Thx заранее.
private void initView() {
Rectangle rect = new Rectangle();
rect.widthProperty().bind(widthProperty());
rect.heightProperty().bind(heightProperty());
rect.setFill(Color.BLACK);
rect.setOpacity(0.8f);
getChildren().add(rect);
MyUiAnimation animator = new MyUiAnimation();
fadeInTransition = animator.getShortFadeInFor(this);
fadeOutTransition = animator.getShortFadeOutFor(this);
fadeOutTransition.setOnFinished(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent arg0) {
Platform.runLater(new Runnable() {
@Override
public void run() {
latch.countDown();
setVisible(false);
}
});
}
});
}
public void hide() {
fadeInTransition.stop();
if (isVisible()) {
latch = new CountDownLatch(1);
fadeOutTransition.playFromStart();
try {
latch.await();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}