java:使程序等待转换完成

java:使程序等待转换完成,java,transitions,Java,Transitions,我一直在写一个方法来切换两个图像。这个方法在鼠标拖放事件中被调用,然后是另一个方法,该方法允许图像向下放置几个位置(我说的是一种糖果压碎机制)。 在我的例子中,第二种方法中的转换在切换完成之前开始,这就是为什么您几乎看不到切换。 我要寻找的是一种让程序等到第一次转换完成后再进入下一个方法的方法。Thread.sleep()对我不起作用,因为它也会停止切换动画,而且我不知道如何在切换方法中正确使用transition.setOnFinished()而不会导致无限循环 这是我的切换方法的一部分:

我一直在写一个方法来切换两个图像。这个方法在鼠标拖放事件中被调用,然后是另一个方法,该方法允许图像向下放置几个位置(我说的是一种糖果压碎机制)。 在我的例子中,第二种方法中的转换在切换完成之前开始,这就是为什么您几乎看不到切换。 我要寻找的是一种让程序等到第一次转换完成后再进入下一个方法的方法。Thread.sleep()对我不起作用,因为它也会停止切换动画,而且我不知道如何在切换方法中正确使用transition.setOnFinished()而不会导致无限循环

这是我的切换方法的一部分:

    public void animateSwitch(int xFirst, int yFirst, int xLast, int yLast) {
//

paralleltransformation allMovements=new paralleltransformation();
TranslateTransition tt=新的TranslateTransition(持续时间.millis(每行的下降时间),getNodeFromGridPane(grdPane,xFirst,yFirst));
TranslateTransition tt2=新的TranslateTransition(持续时间.毫秒(每行的下降时间),getNodeFromGridPane(grdPane,xLast,yLast));
Image old=iv1.getImage();
iv1.setImage(iv2.getImage());
iv1.setTranslateX(iv2.getX());
iv1.setTranslateY(iv2.getY());
iv2.设置图像(旧);
iv2.setTranslateX(iv1.getX());
iv2.setTranslateY(iv1.getY());
if(xFirst==xLast){
tt.toYProperty().set(0);
tt.toXProperty().set(tt.getFromX());
如果(yFirst

提前谢谢

必须使用
allMovements.setOnFinished(eventHandler)设置onFinished事件处理程序
这里
eventHandler
是一个实现
eventHandler
接口的对象

编辑:
我跳过了不知道如何使用此解决方案防止无限循环的部分。您可以使用两个不同的EventHandler来完成不同的部分。第一个完成时调用第二个。第二个不需要调用第一个,因此您不会进入循环。

您可以在切换完成后生成一个
布尔值isFinished
,该值将
为true
,并使用第二个方法进行检查,直到
isFinished
为true
。如何在不使整个程序停止的情况下执行该操作?
(!isFinished){//nothing}
此处将被卡住,直到
isFinished
true
为止。您只需在
isFinished
处访问此
,而
。第二个方法不直接跟随,在调用第二个转换之前,其他类中有其他方法检查模式,所有这些方法都是ca在FXMLDocumentController中调用。我无法从第一个转换方法调用第二个转换方法,因为为此,我需要导入我不想导入(或不允许导入)的类.@TheDawnAvenue你能展示你调用这两个方法的代码吗?我发现如果不知道你是如何使用它的,很难给出一个解决方案。gui.animateSwitch(positions[0][0],positions[0][1],positions[1][0],positions[1][1]);do{gameLogic.deletePattern(ptrn);ptrn=gameLogic.lookForPattern();}而(ptrn!=null);deletePattern()然后为找到模式的每一列调用第二个函数如果向
animateSwitch
方法添加一个EventHandler参数,则可以在EventHandler中执行后续代码,然后在
animateSwitch
方法中使用
allMovements.setOnFinished(EventHandler);
对其进行设置。
    ParallelTransition allMovements = new ParallelTransition();

    TranslateTransition tt = new  TranslateTransition(Duration.millis(FALL_TIME_PER_ROW), getNodeFromGridPane(grdPane, xFirst, yFirst));

    TranslateTransition tt2 = new TranslateTransition(Duration.millis(FALL_TIME_PER_ROW), getNodeFromGridPane(grdPane, xLast, yLast));

    Image old = iv1.getImage();
    iv1.setImage(iv2.getImage());
    iv1.setTranslateX(iv2.getX());
    iv1.setTranslateY(iv2.getY());
    iv2.setImage(old);
    iv2.setTranslateX(iv1.getX());
    iv2.setTranslateY(iv1.getY());
    if (xFirst == xLast) {
        tt.toYProperty().set(0);
        tt.toXProperty().set(tt.getFromX());
        if (yFirst < yLast) {
            tt.fromYProperty().set(rowHeight);
            tt2.fromYProperty().set(-rowHeight);
        }
        else {
            tt.fromYProperty().set(-rowHeight);
            tt2.fromYProperty().set(rowHeight);
        }
        tt2.toYProperty().set(0);
        tt2.toXProperty().set(tt2.getFromX());
    }
    else if (yFirst == yLast) {
        tt.toXProperty().set(0);
        tt.toYProperty().set(tt.getFromY());
        if (xFirst < xLast) {
            tt.fromXProperty().set(rowWidth);
            tt2.fromXProperty().set(-rowWidth);
        }
        else {
            tt.fromXProperty().set(-rowWidth);
            tt2.fromXProperty().set(rowWidth);
        }
        tt2.toXProperty().set(0);
        tt2.toYProperty().set(tt2.getFromY());
    }

    allMovements.getChildren().add(tt);
    allMovements.getChildren().add(tt2);
    allMovements.play();  
}