我盯着我的代码,但我很困惑一个问题:我想做一个淡出转换,我想在淡出转换运行时阻塞当前线程。所以,我的尝试是创建一个 CountDownLatch,它会阻塞线程,直到调用 transition.setOnFinished(),我在其中创建了一个 latch.countdown()。简而言之:我想确保过渡始终全长可见。
对我来说似乎很简单,但是...... setOnFinished() 没有被调用,因为上面提到的当前线程被倒计时锁存器阻塞。
我该如何解决这个问题?提前谢谢。
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();
}
}
}