我在这里检查了一些问题,但找不到正确的答案。也许我使用了错误的关键字进行搜索。但我发现的并没有帮助。这是我的问题。我有一些以某种方式滑动的圆和线。 我想要的是在动画执行后更新平衡变量。
DoubleProperty balance = new SimpleDoubleProperty();
我按如下方式更新余额:
if (shapeADone == false) {
intersecting = arc.centerXProperty().lessThan(boldLine.getEndX() - 13);
intersecting.addListener((obs, wasIntersecting, isNowIntersecting) -> {
System.out.println("Collision!");
animation1.stop();
animation2.stop();
animation3.stop();
});
again = true;
balance.setValue(-1);
} else {
fadeB();
balance.setValue(1);
}
但是在主方法中我想做这样的事情
level1.balance.addListener(ov -> {
System.out.println("The new value is " +
level1.balance.doubleValue());
if (level1.balance.getValue()==1) {
//delay setting scene
primaryStage.setScene(scene2);
}
});
在设置 scene2 之前我需要执行一些动画,但由于平衡会立即更新,所以我的动画无法执行。 我想知道是否有办法延迟聆听平衡或设置场景。 我尝试了Thread.sleep和balance.wait,但它给出了运行时错误。
编辑:这个问题清楚地表明我缺乏关于javafx的知识。我想做的很简单,解决方案也更简单。当动画执行到最后时,我更新平衡值。我想要的只是确保动画显示到最后。
最佳答案
答案如下:
else{
animation3.setOnFinished(event -> balance.setValue(1));
fadeB();
}
正如 Sedrick 的评论,我像这样更改了代码。 在需要执行的动画中添加 setOnFinish 可以解决该问题。它正在工作。
关于java - 让监听器等待javafx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50400756/