当前位置: 首页 > 知识库问答 >
问题:

等待路径转换完成,直到从JavaFX中的函数返回

申屠瀚海
2023-03-14

我正在尝试使用JavaFX实现这样的程序:

我们在场景中有许多Foo类型的对象(用圆圈表示)。< br >它们中的每一个都有一个名为move()的方法,可以将对象移动到场景中的另一个位置。然后,它找到另一个对象(通过调用另一个方法),并对找到的对象调用move方法。大概是这样的:

class Foo {
    Circle circle;
    void move() {
        // change circle location
        // HERE, I WANT TO WAIT UNTIL CIRCLE HAS MOVED ON THE SCENE
        Foo f = findNextFoo();
        foo.move();
    }
}

我希望圆圈的移动对用户来说是可见的和连续的,但当我定期使用PathTransition时,所有对象(几乎)同时移动,因为每个PathTransformation都在一个新线程上运行,并且在其<code>play()</code>之后,函数将继续并调用<code>findNextFoo()</code>方法。

我曾尝试使用setOnFinished for PathTransition在标志完成后更改标志,然后使用<code>while(true)方法。这也不起作用,使我的程序崩溃。

Thread.sleep() 也没有按照我想要的方式工作(所有动作都是在延迟后完成的,但同时完成)。

任何帮助都将不胜感激,谢谢。

共有1个答案

巴英韶
2023-03-14

您不能像使用而(true)Thread.sleep那样阻塞应用程序线程。

如果您能够提前确定所有转换,则可以使用 SequentialTransition

但是,使用onFinated事件可能需要更少的代码修改。只需从事件处理程序开始下一次转换,而不是使用标志无限循环:

void move() {
    PathTransition transition = ...

    transition.setOnFinished(event -> {
        // after transition is finished continue with next one
        Foo f = findNextFoo();
        foo.move();
    });
    transition.play();
}
 类似资料:
  • 问题内容: 如何让我的代码等待,直到DispatchQueue中的任务完成?是否需要任何CompletionHandler或其他东西? 我正在使用Xcode 8.2并在Swift 3中编写。 问题答案: 使用s可以实现这一点。您可以在群组和通话达到平衡时得到通知: 或者您可以等待: 注意 :阻止当前队列(在您的情况下可能是主队列),因此您必须在另一个队列上(如上面的示例代码中)以避免 死锁 。

  • 我正在用JavaFX开发一个数据挖掘应用程序,它依赖于WebView(因此也依赖于WebEngine)。挖掘分两步进行:首先,用户使用UI导航到WebView中的一个网站,以配置可以在哪里搜索感兴趣的数据。其次,使用定期运行的后台任务,WebEngine加载相同的文档,并尝试从加载的文档中提取数据。 这种方法在大多数情况下都能很好地工作,但是最近我遇到了一些使用AJAX呈现内容的页面的麻烦。为了检

  • 所以我在Angular中开发了一个新组件,在ngOninit中我有以下异步函数。。。 这getUserProfile需要完成才能调用它。getPrivateGroup()和这个。需要先完成getPrivateGroup(),然后才能调用此函数。loadGroupPosts()。我知道我可以在异步请求的回调中编写这些函数,但我想知道是否有一种方法可以将它保存在ngOnInit中以保持其更干净? 有人

  • 问题内容: 我有以下 我有一个运行一些ajax的函数,然后根据ajax是否成功返回true或false。我从代码的多个位置调用了这个ajax函数。 因为该函数在ajax完成之前结束,所以它总是返回false。如何避免这种情况? 我读到一些建议我在函数中执行的操作,然后将和函数移至我的和函数。但是,在我的方法中,我进行了大量的计算。很多代码。因此,问题在于,如果我将功能移至其他功能,那么我将复制一堆

  • 问题内容: 我知道这个问题以前曾被问过,但是所有解决方案都不适合我。 我有一个将参数发送到API的函数,并以列表的形式返回数据。我有一个UITableView设置为使用该列表,但是它在列表分配给变量之前运行。 码: 如果不立即将其作为重复投票,我将不胜感激,这是我尝试的方法。 派遣组 信号量计时 运行变量 其中包括= self和= self 。 编辑:要求提取项目, 问题答案: 您不能-也不应该-

  • 我试图为从服务调用异步函数的函数编写测试,但我一辈子都不知道如何让Jasmine在执行expect函数之前等待异步操作完成。 我试图使用Jasmine的“完成”功能,但我不知道如何实现它。 在本例中,只要 调用时,它立即跳转到expect并失败,因为异步操作尚未完成。